Pandas 和Matplotlib绘制饼状图

Pandas 和Matplotlib绘制饼状图

在数据分析和可视化中,饼状图是一种常用的图表类型,用于展示数据的占比关系。在Python中,pandas库提供了简单易用的接口来绘制饼状图,让我们可以快速地对数据进行可视化分析。本文将介绍如何使用pandas库绘制饼状图,并提供一些示例代码来帮助读者更好地理解和应用。

1. 导入必要的库

在使用pandas绘制饼状图之前,我们首先需要导入pandas和matplotlib库。下面是导入库的示例代码:

import pandas as pd
import matplotlib.pyplot as plt

2. 创建数据

在绘制饼状图之前,我们需要准备数据。下面是一个简单的示例,创建一个包含不同类别销售额的DataFrame:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)
print(df)

3. 绘制简单的饼状图

接下来,我们可以使用pandas的plot方法来绘制简单的饼状图。下面是一个示例代码:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90)
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到一个简单的饼状图,展示了不同类别销售额的占比情况。

4. 自定义饼状图样式

除了简单的饼状图外,我们还可以通过自定义样式来美化图表。下面是一个示例代码,展示如何自定义饼状图的颜色和阴影效果:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
explode = (0.1, 0, 0, 0)  # 突出显示第一块

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90, colors=colors, explode=explode, shadow=True)
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到一个自定义样式的饼状图,每个类别的扇形块有不同的颜色,并且第一块稍微突出显示。

5. 添加图例和标题

在绘制饼状图时,我们可以添加图例和标题来更好地说明图表内容。下面是一个示例代码,展示如何添加图例和标题:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90)
plt.legend(title='Category', loc='upper right')
plt.title('Sales Distribution by Category')
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到一个带有图例和标题的饼状图,更清晰地展示了销售额的分布情况。

6. 使用subplots绘制多个饼状图

有时候,我们需要同时比较多个数据集的占比情况,这时可以使用subplots来绘制多个饼状图。下面是一个示例代码,展示如何使用subplots绘制两个饼状图:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

fig, axs = plt.subplots(1, 2, figsize=(10, 5))

df1 = df[df['Category'].isin(['A', 'B'])]
df2 = df[df['Category'].isin(['C', 'D'])]

df1.plot.pie(ax=axs[0], y='Sales', labels=df1['Category'], autopct='%1.1f%%', startangle=90)
df2.plot.pie(ax=axs[1], y='Sales', labels=df2['Category'], autopct='%1.1f%%', startangle=90)

axs[0].set_title('Category A and B')
axs[1].set_title('Category C and D')

plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到两个子图,分别展示了不同类别销售额的占比情况。

7. 使用explode参数突出显示特定类别

有时候,我们希望突出显示某个类别的占比情况,可以使用explode参数来实现。下面是一个示例代码,展示如何使用explode参数突出显示类别B的销售额:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

explode = (0, 0.1, 0, 0)  # 突出显示第二块

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90, explode=explode)
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到销售额类别B的扇形块稍微突出显示。

8. 使用startangle参数调整起始角度

在绘制饼状图时,可以使用startangle参数来调整起始角度,使图表更易于阅读。下面是一个示例代码,展示如何调整起始角度为180度:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=180)
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到饼状图的起始角度被调整为180度。

9. 使用autopct参数显示百分比标签

在饼状图中,可以使用autopct参数来显示每个扇形块的百分比标签。下面是一个示例代码,展示如何显示每个类别销售额的百分比:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90)
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到每个扇形块上显示了对应的百分比标签。

10. 使用explode和shadow参数组合效果

除了单独使用explode和shadow参数外,我们还可以将它们组合起来,实现更炫酷的效果。下面是一个示例代码,展示如何同时使用explode和shadow参数:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

explode = (0.1, 0, 0, 0)  # 突出显示第一块

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90, explode=explode, shadow=True)
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到销售额类别A的扇形块被突出显示,并且整个图表有阴影效果。

11. 使用colors参数设置饼状图颜色

在绘制饼状图时,可以使用colors参数来设置每个扇形块的颜色。下面是一个示例代码,展示如何自定义饼状图的颜色:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

colors = ['red', 'green', 'blue', 'orange']

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90, colors=colors)
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到饼状图的每个扇形块都有不同的颜色。

12. 使用explode参数突出显示多个类别

除了突出显示单个类别外,我们还可以使用explode参数同时突出显示多个类别。下面是一个示例代码,展示如何同时突出显示类别A和C的销售额:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

explode = (0.1, 0, 0.1, 0)  # 突出显示类别A和C

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90, explode=explode)
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到销售额类别A和C的扇形块被突出显示。

13. 使用fontsize参数设置标签字体大小

在绘制饼状图时,可以使用fontsize参数来设置标签的字体大小。下面是一个示例代码,展示如何设置标签字体大小为12:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90, fontsize=12)
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到饼状图的标签字体大小被设置为12。

14. 使用figsize参数设置图表大小

有时候,我们需要调整图表的大小以适应不同的展示需求,可以使用figsize参数来设置图表的大小。下面是一个示例代码,展示如何设置图表大小为8×8:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90)
plt.axis('equal')
plt.gcf().set_size_inches(8, 8)
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到饼状图的大小被设置为8×8。

15. 使用title参数设置图表标题

在绘制饼状图时,可以使用title参数来设置图表的标题。下面是一个示例代码,展示如何设置图表标题为”Sales Distribution”:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90)
plt.axis('equal')
plt.title('Sales Distribution')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到饼状图的标题被设置为”Sales Distribution”。

16. 使用legend参数设置是否显示图例

有时候,我们不需要显示图例,可以使用legend参数来控制图例的显示。下面是一个示例代码,展示如何隐藏图例:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90)
plt.axis('equal')
plt.legend().set_visible(False)
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到图例被隐藏,只显示了饼状图。

17. 使用labeldistance参数设置标签距离

在饼状图中,可以使用labeldistance参数来设置标签与圆心的距离。下面是一个示例代码,展示如何设置标签距离为1.1倍半径:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90, labeldistance=1.1)
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到饼状图的标签与圆心的距离被设置为1.1倍半径。

18. 使用wedgeprops参数设置扇形块属性

在绘制饼状图时,可以使用wedgeprops参数来设置扇形块的属性,如边界颜色和宽度。下面是一个示例代码,展示如何设置扇形块的边界颜色为黑色,宽度为1:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90, wedgeprops={'edgecolor': 'black', 'linewidth': 1})
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到饼状图的扇形块边界被设置为黑色,宽度为1。

19. 使用textprops参数设置标签属性

在饼状图中,可以使用textprops参数来设置标签的属性,如字体大小和颜色。下面是一个示例代码,展示如何设置标签的字体大小为14,颜色为红色:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90, textprops={'fontsize': 14, 'color': 'red'})
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到饼状图的标签字体大小被设置为14,颜色为红色。

20. 使用explode参数突出显示所有类别

有时候,我们希望突出显示所有类别的占比情况,可以使用explode参数来实现。下面是一个示例代码,展示如何同时突出显示所有类别的销售额:

import pandas as pd
import matplotlib.pyplot as plt
data = {'Category': ['A', 'B', 'C', 'D'],
        'Sales': [300, 500, 200, 400]}
df = pd.DataFrame(data)

explode = (0.1, 0.1, 0.1, 0.1)  # 突出显示所有类别

df.plot.pie(y='Sales', labels=df['Category'], autopct='%1.1f%%', startangle=90, explode=explode)
plt.axis('equal')
plt.show()

Output:

Pandas 和Matplotlib绘制饼状图

运行以上代码,我们可以看到所有销售额类别的扇形块都被突出显示。

通过以上示例代码,我们学习了如何使用pandas库绘制饼状图,并对饼状图的各种参数和样式进行了详细介绍。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程