如何绘制和注释分组的条形图

Prospero

我遇到了一个关于Python中的matplotlib的棘手问题。我想用几个代码创建一个分组的条形图,但是该图表出错。你能给我一些建议吗?代码如下。

import numpy as np
import pandas as pd
file="https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DV0101EN/labs/coursera/Topic_Survey_Assignment.csv"
df=pd.read_csv(file,index_col=0)

df.sort_values(by=['Very interested'], axis=0,ascending=False,inplace=True)

df['Very interested']=df['Very interested']/2233
df['Somewhat interested']=df['Somewhat interested']/2233
df['Not interested']=df['Not interested']/2233
df

df_chart=df.round(2)
df_chart

labels=['Data Analysis/Statistics','Machine Learning','Data Visualization',
       'Big Data (Spark/Hadoop)','Deep Learning','Data Journalism']
very_interested=df_chart['Very interested']
somewhat_interested=df_chart['Somewhat interested']
not_interested=df_chart['Not interested']

x=np.arange(len(labels))
w=0.8

fig,ax=plt.subplots(figsize=(20,8))
rects1=ax.bar(x-w,very_interested,w,label='Very interested',color='#5cb85c')
rects2=ax.bar(x,somewhat_interested,w,label='Somewhat interested',color='#5bc0de')
rects3=ax.bar(x+w,not_interested,w,label='Not interested',color='#d9534f')

ax.set_ylabel('Percentage',fontsize=14)
ax.set_title("The percentage of the respondents' interest in the different data science Area",
            fontsize=16)
ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend(fontsize=14)

def autolabel(rects):
    """Attach a text label above each bar in *rects*, displaying its height."""
    for rect in rects:
        height = rect.get_height()
        ax.annotate('{}'.format(height),
                    xy=(rect.get_x() + rect.get_width() / 3, height),
                    xytext=(0, 3),  # 3 points vertical offset
                    textcoords="offset points",
                    ha='center', va='bottom')


autolabel(rects1)
autolabel(rects2)
autolabel(rects3)

fig.tight_layout()

plt.show()

这个代码模块的输出确实是一团糟。但是我期望的效果应该类似于图片中的条形图。您能告诉我代码中哪一点不正确吗?

在此处输入图片说明

特伦顿·麦金尼
  • 从注释JohanCw = 0.8 / 3将解决这个问题,考虑到当前的代码。
  • 但是,生成图可以更轻松地完成 pandas.DataFrame.plot
import pandas as pd
import matplotlib.pyplot as plt

# given the following code to create the dataframe
file="https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DV0101EN/labs/coursera/Topic_Survey_Assignment.csv"
df=pd.read_csv(file,index_col=0)

df.sort_values(by=['Very interested'], axis=0,ascending=False,inplace=True)

df['Very interested']=df['Very interested']/2233
df['Somewhat interested']=df['Somewhat interested']/2233
df['Not interested']=df['Not interested']/2233

# your colors
colors = ['#5cb85c', '#5bc0de', '#d9534f']

# plot with annotations is probably easier
p1 = df.plot.bar(color=colors, figsize=(20, 8), ylabel='Percentage', title="The percentage of the respondents' interest in the different data science Area")
p1.set_xticklabels(p1.get_xticklabels(), rotation=0)

for p in p1.patches:
    p1.annotate(f'{p.get_height():0.2f}', (p.get_x() + p.get_width() / 2., p.get_height()), ha = 'center', va = 'center', xytext = (0, 10), textcoords = 'offset points')

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

绘制条形图

来自分类Dev

在循环[R]中绘制几个分组的条形图

来自分类Dev

熊猫,条形图注释

来自分类Dev

熊猫条形图,如何注释分组的水平条形图

来自分类Dev

使用分组的水平条形图绘制数组

来自分类Dev

如何绘制熊猫系列的条形图?

来自分类Dev

如何在matplotlib中绘制5个分组的条形图?

来自分类Dev

如何在熊猫中分组,计数并绘制条形图?

来自分类Dev

如何使用熊猫从数据框中绘制(分组的)条形图

来自分类Dev

如何在同一图表上用单独的轴绘制条形图和线形图?

来自分类Dev

绘制多个条形图

来自分类Dev

如何使用ggplot绘制条形图

来自分类Dev

使用分组依据绘制条形图

来自分类Dev

如何使用ggplot2为分组条形图绘制误差线?

来自分类Dev

如何绘制数据长度不均匀的分组条形图?

来自分类Dev

如何使用未绘制的Dataframe col的单独值(日期)注释Seaborn条形图

来自分类Dev

如何分组,汇总和绘制条形图?

来自分类Dev

在python中使用matplotlib绘制多个分组的条形图

来自分类Dev

堆叠和分组的条形图

来自分类Dev

绘制条形图

来自分类Dev

如何用MATLAB绘制股票图条形图?

来自分类Dev

分组条形图R

来自分类Dev

如何绘制熊猫系列的条形图?

来自分类Dev

如何绘制以下条形图?

来自分类Dev

分组条形图 Matlab

来自分类Dev

分组条形图:ggplot

来自分类Dev

将数据框绘制为分组条形图

来自分类Dev

使用绝对值和百分比值 + 标签绘制分组条形图

来自分类Dev

并排绘制条形图