我希望能够将每个百分比值定位在距离中心不同的距离,但是pctdistance需要是单个值。
对于我的情况,pctdistance应该是一个包含生成距离的列表(由范围生成)。
import matplotlib.pyplot as plt
fig =plt.figure(figsize = (10,10))
ax11 = fig.add_subplot(111)
# Data to plot
labels = 'Python', 'C++', 'Ruby', 'Java'
sizes = [215, 130, 245, 2000]
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
explode = (0.1, 0, 0, 0) # explode 1st slice
# Plot
w,l,p = ax11.pie(sizes, labels=labels, colors=colors,
autopct='%1.1f%%', startangle=140, pctdistance=0.8, radius = 0.5)
[t.set_rotation(0) for t in p]
[t.set_fontsize(50) for t in p]
plt.axis('equal')
plt.show()
答案 0 :(得分:2)
pie
函数不会将列表或数组作为pctdistance
参数的输入。
您可以使用预定义的pctdistances
列表手动定位文本。
import numpy as np
import matplotlib.pyplot as plt
fig =plt.figure(figsize = (4,4))
ax11 = fig.add_subplot(111)
# Data to plot
labels = 'Python', 'C++', 'Ruby', 'Java'
sizes = [215, 130, 245, 2000]
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
# Plot
w,l,p = ax11.pie(sizes, labels=labels, colors=colors,
autopct='%1.1f%%', startangle=140, pctdistance=1, radius = 0.5)
pctdists = [.8, .5, .4, .2]
for t,d in zip(p, pctdists):
xi,yi = t.get_position()
ri = np.sqrt(xi**2+yi**2)
phi = np.arctan2(yi,xi)
x = d*ri*np.cos(phi)
y = d*ri*np.sin(phi)
t.set_position((x,y))
plt.axis('equal')
plt.show()
答案 1 :(得分:1)
在尝试更困难的事情之前,值得优化绘图的参数。通过适当选择字体大小和pctdistance,包括explode,您可以获得以下内容:
import matplotlib.pyplot as plt
fig =plt.figure(figsize = (10,10))
ax11 = fig.add_subplot(111)
# Data to plot
sizes = [215, 130, 245, 2000]
labels = 'Python', 'C++', 'Ruby', 'Java'
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
explode = (0.1, 0, 0, 0) # explode 1st slice
# Plot
w,l,p = ax11.pie(sizes, labels=labels, colors=colors,
autopct='%1.1f%%', startangle=140, pctdistance=0.65, radius = 1, explode=explode)
[t.set_rotation(0) for t in p]
[t.set_fontsize(25) for t in p]
[t.set_fontsize(25) for t in l]
plt.axis('equal')
plt.show()