首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matplotlib中使用饼图时,只更改圆圈内的行属性

在matplotlib中使用饼图时,只更改圆圈内的行属性
EN

Stack Overflow用户
提问于 2016-11-21 13:48:31
回答 2查看 2.5K关注 0票数 1

当我从matplotlib中用饼分割圆时,我只想在圆内更改行的属性:

代码语言:javascript
复制
plt.rcParams['patch.edgecolor'] = 'lightgrey' 
plt.rcParams['patch.linewidth'] = 1 

影响所有的线,包括圆的线,它。

EN

回答 2

Stack Overflow用户

发布于 2016-11-21 14:54:17

步骤1-更改“内线”

和往常一样,查看matplotlib API文档是个好主意,我们发现pie图提供了许多参数,其中之一是wedgeprops

楔形道具:没有键值对的片段 把一些参数传给制作馅饼的楔形物体。例如,您可以传递楔形道具={‘线宽’:3 }来设置楔形边线的宽度等于3。有关详细信息,请参阅doc/楔形对象的参数

Wedge的一个参数是edgecolor,另一个参数是linewidth

所以你总得打电话给

代码语言:javascript
复制
plt.pie([215, 130], colors=['b', 'r'], 
                    wedgeprops = { 'linewidth' : 1 , 'edgecolor' : 'lightgrey'} )

但是,由于这也改变了我们需要的饼图的轮廓.

第二步-设置圆圈

现在,为了在饼图周围画一个圆圈,或者恢复饼饼的圆圈的初始线条,我们可以设置一个新的Circle补丁,在饼图上设置所需的属性。

完整的解决方案如下所示

代码语言:javascript
复制
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()

票数 3
EN

Stack Overflow用户

发布于 2022-08-29 22:13:03

对于同样适用于任何饼图的解决方案,包括爆炸饼图。

代码语言:javascript
复制
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)

使用下列选项之一:

选项--,为馅饼的每个楔形添加行

代码语言:javascript
复制
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,向饼楔中添加边缘,然后用另一种颜色(例如白色)覆盖径向边缘。

代码语言:javascript
复制
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()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40721758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档