首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matplotlib,Pandas,Pie Chart标签错误

Matplotlib,Pandas,Pie Chart标签错误
EN

Stack Overflow用户
提问于 2016-02-19 01:43:09
回答 3查看 17.5K关注 0票数 10

我已经使用Pandas包装器counts.plot(kind='pie')和Matplotlib counts `plt.pie(counts)生成了一个饼图。

问题出在标签上。使用这两个饼图都可以正确地表示为values = pie楔形,但是当我开始引入自定义颜色和图例时,标签是关闭的。

有什么办法解决这个问题吗?

代码=

代码语言:javascript
复制
group_names = ['2-3 km', '3-5 km','5-7 km','7-10 km','10-20 km','20-50 km','50-75 km','75-100 km','>100 km']

df['bins'] = pd.cut(df['distkm'], bins)
df['categories'] = pd.cut(df['distkm'], bins, labels=group_names)

counts = df['categories'].value_counts()
plt.axis('equal')
explode = (0, 0, 0,0.1,0.1,0.2,0.3,0.4,0.6)
colors = ['#191970','#001CF0','#0038E2','#0055D4','#0071C6','#008DB8','#00AAAA','#00C69C','#00E28E','#00FF80',]
counts.plot(kind='pie', fontsize=17,colors=colors,explode=explode)
plt.legend(labels=group_names,loc="best")

plt.show()

数据看起来像

代码语言:javascript
复制
20-50 km     1109
50-75 km      696
10-20 km      353
75-100 km     192
3-5 km        168
7-10 km        86
5-7 km         74
>100 km        65
2-3 km         53
dtype: int64
EN

回答 3

Stack Overflow用户

发布于 2016-02-19 01:55:13

group_namescounts.index的顺序不同。所以不是使用

代码语言:javascript
复制
plt.legend(labels=group_names,loc="best")

使用

代码语言:javascript
复制
plt.legend(labels=counts.index, loc="best")

代码语言:javascript
复制
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

group_names = ['2-3 km', '3-5 km', '5-7 km', '7-10 km', '10-20 km', '20-50 km', 
               '50-75 km', '75-100 km', '>100 km']

counts = pd.Series([1109, 696, 353, 192, 168, 86, 74, 65, 53], 
                   index=['20-50 km', '50-75 km', '10-20 km', '75-100 km',
                          '3-5 km', '7-10 km', '5-7 km', '>100 km', '2-3 km'])

explode = (0, 0, 0, 0.1, 0.1, 0.2, 0.3, 0.4, 0.6)
colors = ['#191970', '#001CF0', '#0038E2', '#0055D4', '#0071C6', '#008DB8', '#00AAAA',
          '#00C69C', '#00E28E', '#00FF80', ]

counts.plot(kind='pie', fontsize=17, colors=colors, explode=explode)
plt.axis('equal')
plt.ylabel('')
plt.legend(labels=counts.index, loc="best")
plt.show()

票数 12
EN

Stack Overflow用户

发布于 2016-02-19 02:39:25

创建值很重要,如果我取消自动排序,图例就会正确绘制。

counts = df['categories'].value_counts(sort=False)

票数 4
EN

Stack Overflow用户

发布于 2016-02-19 02:20:51

您可以直接使用matplotlib将pandas DataFrame转换为列表和绘图:

代码语言:javascript
复制
sizes = counts.values.tolist()
plt.axis('equal')
plt.pie(sizes,explode=explode,labels=group_names,colors=colors)
plt.legend(labels=group_names,loc="best")
plt.show()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35488666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档