python 避免标题重叠

tpxzln5u  于 2023-01-12  发布在  Python
关注(0)|答案(2)|浏览(149)

我正在使用下面的python代码来绘制饼图。但是,图表的标题是重叠的,如下所示。我怎样才能使文本清晰可见而不重叠呢?我在想,也许我可以有一个标题列表及其百分比来匹配饼图中的颜色。这可能吗?
饼图现在:https://prnt.sc/N1djial9dXBV

outcomes = {}
for i in range(len(crime_data)):
    crime_type = crime_data.iloc[i]['Crime type']
    outcome = crime_data.iloc[i]['Last outcome category']
    if crime_type not in outcomes:
        outcomes[crime_type] = {}
    if outcome not in outcomes[crime_type]:
        outcomes[crime_type][outcome] = 0
    outcomes[crime_type][outcome] += 1

for crime_type in outcomes:
    fig, ax = plt.subplots()
    ax.pie(outcomes[crime_type].values(), labels=outcomes[crime_type].keys(), autopct='%1.1f%%')
    ax.set_title(crime_type)
    plt.show()
4nkexdtk

4nkexdtk1#

有各种各样的方法。
1.设置标题位置
ax.set_title(crime_type, y=1.08)
1.在饼图中显示标签

legend_labels = outcomes[crime_type].keys()
wedges, texts, autotexts = ax.pie(outcomes[crime_type].values(), labels=legend_labels, autopct='%1.1f%%')
ax.legend(wedges,legend_labels,title=crime_type,bbox_to_anchor=(1,0.5),loc="center left")

1.设定尺寸英寸
fig.set_size_inches(w, h)
1.设定尺寸余量
plt.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9)

jrcvhitl

jrcvhitl2#

使用connectionstyle进行注解
示例:

import matplotlib.pyplot as plt
import numpy as np 

fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal"))

labels = ["A",
          "B",
          "C",
          "D",
          "E",
          "F"]

data = [225, 90, 50, 60, 100, 10]

wedges, texts = ax.pie(data)

bbox_props = dict(boxstyle="square,pad=0.3", fc="w", ec="k", lw=0.72)
kw = dict(arrowprops=dict(arrowstyle="-"),
          bbox=bbox_props, zorder=0, va="center")

for i, p in enumerate(wedges):
    ang = (p.theta2 - p.theta1)/2. + p.theta1
    y = np.sin(np.deg2rad(ang))
    x = np.cos(np.deg2rad(ang))
    horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]
    connectionstyle = "angle,angleA=0,angleB={}".format(ang)
    kw["arrowprops"].update({"connectionstyle": connectionstyle})
    ax.annotate(labels[i], xy=(x, y), xytext=(1.35*np.sign(x), 1.4*y),
                horizontalalignment=horizontalalignment, **kw)

plt.show()

输出:

相关问题