matplotlib 图例显示问题
Posted
技术标签:
【中文标题】matplotlib 图例显示问题【英文标题】:matplotlib legend display issue 【发布时间】:2018-03-19 05:55:15 【问题描述】:我从我的数据框中得到两个值。即('通过',失败')。根据这些值尝试构建饼图。我喜欢在图例中显示这两个值,即使这些值不存在于我的数据框中。 数据框值是“通过”、“失败”
colors = ['green','red']
ax_3 = df_spark["Missing_records_check"].value_counts().sort_index(ascending=False).plt(
kind='pie',
y="Missing_records_check",
figsize=(10, 10),
legend=True,
autopct='%1.1f%%',
startangle=90,
shadow=False,
colors=['green','red'])
【问题讨论】:
【参考方案1】:创建一个分类变量会有所帮助。
from pandas.api.types import CategoricalDtype
colors = ['green','red']
labels=['Passed','Failed']
cat_type = CategoricalDtype(categories=labels, ordered=True)
df_spark["Missing_records_check"] = df_spark["Missing_records_check"].astype(cat_type)
ax_3 =df_spark["Missing_records_check"].value_counts().sort_index(ascending=True)\
.plot(kind='pie',y="Missing_records_check", figsize=(10, 10),legend=True,autopct='%1.1f%%',\
startangle=90,shadow=False,colors=['green','red'])
由于您还想删除不存在类别的标签,我可能会使用自定义图例。我还添加了一行来根据值对颜色进行排序。-
import pandas as pd
import matplotlib.patches as mpatches
color= ['red' if l == 'Failed' else 'green' for l in df_spark['Missing_records_check']]
ax_3 =df_spark["Missing_records_check"].value_counts().sort_index(ascending=False)\
.plot(kind='pie',y="Missing_records_check", figsize=(10, 10),autopct='%1.1f%%',\
startangle=90,shadow=False,colors=color, legend=True)
red_patch = mpatches.Patch(color='red', label='Failed')
green_patch = mpatches.Patch(color='green', label='Passed')
ax_3.legend(handles=[green_patch, red_patch])
【讨论】:
它的效果很好,但现在会弹出 2 个不同的项目 1. 每个标签的颜色不是固定的。即标签“通过”应始终为绿色,“失败”应始终为红色,目前“失败”为绿色。 2. 如果两个值中的任何一个为 0%,饼图中间仍然显示为黑色。请告诉我如何避免这种情况。提前致谢 @Jack,请注意我使用了 sort_index(ascending=True),这实际上适用于颜色。 非常感谢您的回复。图例工作得非常好,但饼图值与图例不匹配。例如:饼图值为失败,但图例显示为通过。 着色基于饼图值而不是基于轴标签我也编辑了我的原始帖子。很抱歉造成混乱。 @Jack 我添加了一行来根据值对颜色进行排序。这应该适合你以上是关于matplotlib 图例显示问题的主要内容,如果未能解决你的问题,请参考以下文章