pandas plotting tutorial http://pandas.pydata.org/pandas-docs/version/0.15.0/visualization.html上的饼图示例生成下图:
使用此代码:
import matplotlib.pyplot as plt
plt.style.use('ggplot')
import numpy as np
np.random.seed(123456)
import pandas as pd
df = pd.DataFrame(3 * np.random.rand(4, 2), index=['a', 'b', 'c', 'd'], columns=['x', 'y'])
f, axes = plt.subplots(1,2, figsize=(10,5))
for ax, col in zip(axes, df.columns):
df[col].plot(kind='pie', autopct='%.2f', labels=df.index, ax=ax, title=col, fontsize=10)
ax.legend(loc=3)
plt.show()
我想从两个子图中删除文本标签(a,b,c,d),因为对于我的应用程序,这些标签很长,所以我只想在图例中显示它们。
读完这篇文章后:How to add a legend to matplotlib pie chart?,我找到了matplotlib.pyplot.pie
的方法,但即使我还在使用ggplot,这个数字并不像花哨的那样。
f, axes = plt.subplots(1,2, figsize=(10,5))
for ax, col in zip(axes, df.columns):
patches, text, _ = ax.pie(df[col].values, autopct='%.2f')
ax.legend(patches, labels=df.index, loc='best')
我的问题是,有没有一种方法可以将我想要的东西结合起来?要清楚,我想要大熊猫的幻想,但要从楔子中删除文字。
谢谢
答案 0 :(得分:27)
您可以关闭图表中的标签,然后在legend
的调用中定义它们:
df[col].plot(kind='pie', autopct='%.2f', labels=['','','',''], ax=ax, title=col, fontsize=10)
ax.legend(loc=3, labels=df.index)
或
... labels=None ...
答案 1 :(得分:1)
使用熊猫,您仍然可以使用matplotlib.pyplot.pie关键字labeldistance
删除楔形标签。
例如。 df.plot.pie(subplots = True,labeldistance = None,legend = True)
来自docs:
labeldistance
:float
或None
,可选,默认值:1.1
绘制饼形标签的径向距离。如果设置为None
,则不会绘制标签,但会将其存储以供在legend()
在上下文中:
import matplotlib.pyplot as plt
plt.style.use('ggplot')
import numpy as np
np.random.seed(123456)
import pandas as pd
df = pd.DataFrame(3 * np.random.rand(4, 2), index=['a', 'b', 'c', 'd'], columns=['x', 'y'])
df.plot.pie(subplots=True, figsize=(10,5), autopct='%.2f', fontsize=10, labeldistance=None);
plt.show()