当我从matplotlib中用饼分割圆时,我只想在圆内更改行的属性:
plt.rcParams['patch.edgecolor'] = 'lightgrey'
plt.rcParams['patch.linewidth'] = 1 影响所有的线,包括圆的线,它。
发布于 2016-11-21 14:54:17
步骤1-更改“内线”
和往常一样,查看matplotlib API文档是个好主意,我们发现pie图提供了许多参数,其中之一是wedgeprops。
楔形道具:没有键值对的片段 把一些参数传给制作馅饼的楔形物体。例如,您可以传递楔形道具={‘线宽’:3 }来设置楔形边线的宽度等于3。有关详细信息,请参阅doc/楔形对象的参数。
Wedge的一个参数是edgecolor,另一个参数是linewidth。
所以你总得打电话给
plt.pie([215, 130], colors=['b', 'r'],
wedgeprops = { 'linewidth' : 1 , 'edgecolor' : 'lightgrey'} )但是,由于这也改变了我们需要的饼图的轮廓.
第二步-设置圆圈
现在,为了在饼图周围画一个圆圈,或者恢复饼饼的圆圈的初始线条,我们可以设置一个新的Circle补丁,在饼图上设置所需的属性。
完整的解决方案如下所示
import matplotlib.pyplot as plt
import matplotlib.patches
fig, ax = plt.subplots(figsize=(3,3))
ax.axis('equal')
slices, labels = ax.pie([186, 130, 85], colors=['b', 'r','y'],
wedgeprops = { 'linewidth' : 1 , 'edgecolor' : 'lightgrey'} )
# get the center and radius of the pie wedges
center = slices[0].center
r = slices[0].r
# create a new circle with the desired properties
circle = matplotlib.patches.Circle(center, r, fill=False, edgecolor="k", linewidth=2)
# add the circle to the axes
ax.add_patch(circle)
plt.show()

发布于 2022-08-29 22:13:03
对于同样适用于任何饼图的解决方案,包括爆炸饼图。
import numpy as np
import matplotlib as plt
data = [1, 2, 3, 1, 4, 2]
explode = [0.05] * len(data)
labels = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'[:len(data)])
fig, ax = plt.subplots()
pie = ax.pie(data, labels=labels, explode=explode)使用下列选项之一:
选项--,为馅饼的每个楔形添加行
pie = ax.pie(data, labels=labels, explode=explode)
for wedge in pie[0]:
ax.plot([wedge.center[0], wedge.r*np.cos(wedge.theta1*np.pi/180)+wedge.center[0]], [wedge.center[1], wedge.r*np.sin(wedge.theta1*np.pi/180)+wedge.center[1]], color='k')
ax.plot([wedge.center[0], wedge.r*np.cos(wedge.theta2*np.pi/180)+wedge.center[0]], [wedge.center[1], wedge.r*np.sin(wedge.theta2*np.pi/180)+wedge.center[1]], color='k')
fig.show()

选项B,向饼楔中添加边缘,然后用另一种颜色(例如白色)覆盖径向边缘。
from matplotlib import patches
pie = ax.pie(data, labels=labels, explode=explode, wedgeprops=dict(ec='k')
for wedge in pie[0]:
arc = patches.Arc(wedge.center, 2*wedge.r, 2*wedge.r, 0, theta1=wedge.theta1, theta2=wedge.theta2, ec='w', lw=1.5)
ax.add_patch(arc)
fig.show()

https://stackoverflow.com/questions/40721758
复制相似问题