Python 如何使用我的数据制作更具视觉吸引力的条形图
我正在尝试使用matplotlib中的barh绘制此数据帧Python 如何使用我的数据制作更具视觉吸引力的条形图,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,我正在尝试使用matplotlib中的barh绘制此数据帧 SAMPLE DF: genre tracks_sold percentage 0 Rock 561 53.377735 1 Alternative & Punk 130 12.369172 2 Metal 124 11.798287 3 R&B/Sou
SAMPLE DF:
genre tracks_sold percentage
0 Rock 561 53.377735
1 Alternative & Punk 130 12.369172
2 Metal 124 11.798287
3 R&B/Soul 53 5.042816
4 Blues 36 3.425309
genre_sold_usa.plot.barh()
我试图让这个情节在视觉上更具信息性
我想让我的情节以类似的方式,但在视觉上更具吸引力:
请指导我如何使用其他方法使其具有视觉吸引力。给定
df
作为数据帧,我只是尝试重现您提供的示例。在我看来,旋转y
-标签更有意义“视觉吸引力”是一个主观问题
fig = plt.figure(figsize=(10, 6))
ax = df.plot.barh(y='tracks_sold', x='genre', color='mediumseagreen', ec='k', lw=1)
plt.xlim(0, 630)
plt.yticks(rotation=30)
plt.ylabel('')
plt.title('Top Selling Genres in the USA')
ax.legend_.remove()
# Way 1 of putting percentage values
for i in range(len(df)):
ax.text(tracks_sold[i] + 5, 0.98*i, str(int(percentage[i])) + '%', color='black', fontweight='bold')
# Way 2 of putting percentage values
# for i, p in enumerate(ax.patches):
# ax.annotate(str(int(percentage[i])) + '%', (p.get_width() * 1.02, i))
输出
这是一个主观的问题。也许可以通过切换样式表来完成?我看到的最吸引人的变化是只切换到%基础,并删除特定%以下的列,以便可读。您能解释一下如何将百分比放在条形顶部吗?您能再解释一下代码的for循环部分吗?它是使用
for
循环完成的。您可以提取补丁(条)并通过ax.patches
在其上循环。由于绘图中有5个面片,i
将从0变为4p.get_width()
提供每个条的高度(水平)。你把它乘以1.02,只是稍微向右移动str(int(percentage[i]))
只需将百分比值转换为最接近的整数,然后将其转换为字符串ax.annotate
然后将此字符串百分比值置于(x,y)值,其中x=p.get_width()*1.02
和y=0,1,2,3,4
是y轴上每个条的中心枚举
是一种获取列表/数组的值的方法,您可以在该列表/数组上迭代每个元素的索引,该索引从0开始,一直到len(list)-1
。如果答案对你有帮助,请随意接受。我能知道ec和lw是什么意思吗?我在文档页面中找不到任何内容ax=df.plot.barh(y='tracks\u selled',x='genre',color='mediumsegreen',ec='k',lw=1)
我在上面的回答代码中添加了第二种方法和修改后的输出图。它现在或多或少在中间。您可以通过当前更改系数0.98
来进一步控制位置。但这只是一个小小的区别