Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用我的数据制作更具视觉吸引力的条形图_Python_Python 3.x_Matplotlib - Fatal编程技术网

Python 如何使用我的数据制作更具视觉吸引力的条形图

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

我正在尝试使用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/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变为4
p.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
来进一步控制位置。但这只是一个小小的区别