Python 饼图

python 画图--饼图

这是python画图系列第三篇--饼图

画饼图用到的方法为:

matplotlib.pyplot.pie()

参数为:


pie(x, explode=None, labels=None,
    colors=('b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'),
    autopct=None, pctdistance=0.6, shadow=False,
    labeldistance=1.1, startangle=None, radius=None,
    counterclock=True, wedgeprops=None, textprops=None,
    center = (0, 0), frame = False )

参数说明:

x       (每一块)的比例,如果sum(x) > 1会使用sum(x)归一化
labels  (每一块)饼图外侧显示的说明文字
explode (每一块)离开中心距离
startangle  起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起
shadow  是否阴影
labeldistance label绘制位置,相对于半径的比例, 如<1则绘制在饼图内侧
autopct 控制饼图内百分比设置,可以使用format字符串或者format function
        '%1.1f'指小数点前后位数(没有用空格补齐)
pctdistance 类似于labeldistance,指定autopct的位置刻度
radius  控制饼图半径

返回值:
如果没有设置autopct,返回(patches, texts)
如果设置autopct,返回(patches, texts, autotexts)
patches -- list --matplotlib.patches.Wedge对象

texts autotexts -- matplotlib.text.Text对象


下面是一个简单的示例:


# -*- coding: utf-8 -*-
import numpy as np  
import matplotlib.mlab as mlab  
import matplotlib.pyplot as plt  
labels=['China','Swiss','USA','UK','Laos','Spain']
X=[222,42,455,664,454,334]  

fig = plt.figure()
plt.pie(X,labels=labels,autopct='%1.2f%%') #画饼图(数据,数据对应的标签,百分数保留两位小数点)
plt.title("Pie chart")
  

plt.show()  
plt.savefig("PieChart.jpg")

下面是结果:


下面是另一个示例:


# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

def draw_pie(labels,quants):
    # make a square figure
    plt.figure(1, figsize=(6,6))
    # For China, make the piece explode a bit
    expl = [0,0.1,0,0,0,0,0,0,0,0]   #第二块即China离开圆心0.1
    # Colors used. Recycle if not enough.
    colors  = ["blue","red","coral","green","yellow","orange"]  #设置颜色(循环显示)
    # Pie Plot
    # autopct: format of "percent" string;百分数格式
    plt.pie(quants, explode=expl, colors=colors, labels=labels, autopct='%1.1f%%',pctdistance=0.8, shadow=True)
    plt.title('Top 10 GDP Countries', bbox={'facecolor':'0.8', 'pad':5})
    plt.show()
    plt.savefig("pie.jpg")
    plt.close()

# quants: GDP

# labels: country name

labels   = ['USA', 'China', 'India', 'Japan', 'Germany', 'Russia', 'Brazil', 'UK', 'France', 'Italy']

quants   = [15094025.0, 11299967.0, 4457784.0, 4440376.0, 3099080.0, 2383402.0, 2293954.0, 2260803.0, 2217900.0, 1846950.0]

draw_pie(labels,quants)

<think>嗯,用户想用Python在matplotlib里画3D立体效果的。首先,我得回忆一下matplotlib有没有直接支持3D的功能。通常是2D的,但matplotlib的mplot3d工具包应该能实现立体效果。 记得之前学过,可能需要使用Axes3D模块,然后通过调整一些参数让有高度,呈现立体感。不过标准的pie函数可能不支持3D,可能需要一些技巧。比如,可以先画一个普通的,然后通过调整z轴的位置或者添加高度来模拟3D效果。 另外,用户可能需要每个扇区有一定的厚度,看起来像圆柱体的一部分。这时候可能需要将每个扇区单独绘制,并添加侧面和顶面。或者,参考一些示例代码,使用bar3d函数来构建类似的3D效果,但这种方法可能会比较复杂。 然后,考虑到用户需要示例代码,我应该提供一个简单有效的方法。或许使用Pie的爆炸效果,然后结合3D投影?比如,在3D坐标系中绘制多个层叠起来,但这样可能不够直观。 查一下资料,发现matplotlib的官方示例中有一个3D的例子,使用explode参数和view_init来调整视角。是的,这样可能行得通。主要步骤是创建3D坐标轴,然后调用pie函数,调整视为3D模式,并设置合适的高度,让看起来立体。 另外,颜色和标签的设置也很重要,需要确保每个部分清晰可辨。可能还需要调整阴影效果,增强立体感。代码中需要导入必要的库,比如import matplotlib.pyplot as plt,并且使用fig.add_subplot(projection='3d')来创建3D子。 测试一下示例代码是否可行。比如,定义数据和标签,然后绘制,设置startangle和radius等参数,再通过view_init调整视角。这样生成的表应该呈现立体效果。需要注意的是,有些版本可能需要调整zorder或者使用其他参数来优化显示效果。 最后,还要考虑用户可能遇到的常见问题,比如坐标轴显示不合适,或者立体效果不明显。在注意事项里提醒调整view_init的角度,或者颜色透明度等。可能还需要提到如何保存像,或者自定义标签的位置和样式。</think>要使用Python的Matplotlib绘制3D立体,可以通过`mplot3d`工具包实现。以下是完整实现方法和示例代码: ### 实现步骤 1. **导入库**:使用`matplotlib.pyplot`和`mplot3d`工具包 2. **创建3D坐标系**:通过`fig.add_subplot()`设置`projection='3d'` 3. **生成数据**:定义各扇区数值和标签 4. **绘制基础**:使用`pie()`函数生成2D元素 5. **添加3D效果**:通过设置高度参数`z`和调整视角`view_init`实现立体投影[^1] ### 示例代码 ```python import matplotlib.pyplot as plt import numpy as np # 创建3D坐标系 fig = plt.figure(figsize=(8,6)) ax = fig.add_subplot(111, projection='3d') # 数据准备 data = [15, 30, 45, 10] labels = ['A', 'B', 'C', 'D'] colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99'] # 绘制基础(设置透明背景) pies = ax.pie(data, radius=1.2, colors=colors, startangle=90, wedgeprops=dict(alpha=0.7))[0] # 添加3D高度效果 for pie in pies: pie.set_z(0.5) # 设置高度 pie.set_edgecolor('white') # 设置边缘颜色 # 调整视角(仰角60度,方位角30度) ax.view_init(elev=60, azim=30) # 隐藏坐标轴 ax.set_axis_off() # 添加例 plt.legend(pies, labels, loc="upper right", bbox_to_anchor=(1.3,1)) plt.show() ``` ### 关键参数说明 1. `projection='3d'`:创建3D坐标系 2. `set_z(0.5)`:设置垂直高度 3. `view_init(elev, azim)`:调整观察角度 - `elev`:垂直仰角(默认30) - `azim`:水平方位角(默认-60) ### 效果优化建议 1. 调整`wedgeprops`的`alpha`值控制透明度 2. 使用`set_edgecolor()`添加边缘线增强立体感 3. 通过`radius`参数控制大小 4. 修改`startangle`参数改变起始角度[^2]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值