Posted in Python onApril 14, 2022
渐变色扇形图
使用 python - matplotlib 颜色地图plt.cm模块儿,来绘制出颜色渐变、更加好看的扇形图。也称彩虹图,但是也不限于彩虹图,可以选择的颜色地图(colormap)有:
Paired, autumn, rainbow, gray, spring, Darks。
下边以颜色地图rainbow为例(彩虹图),写出以下代码,并展示各种颜色样式下的图像效果。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
# 字体使用楷体
plt.rcParams['font.sans-serif'] = ['STKAITI']
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
shapes = ['安徽省', '云南省', '福建省', '河南省', '辽宁省',
'重庆', '湖南省', '四川省', '北京', '上海', '广西壮族自治区', '河北省',
'浙江省', '江苏省', '湖北省', '山东省', '广东省']
values = [842, 866, 1187, 1405, 1495, 1620, 1717,
2313, 2378, 3070, 4332, 5841, 6482, 7785, 9358, 9818, 20254]
s = pd.Series(values, index=shapes)
labels = s.index
sizes = s.values
fig, ax = plt.subplots(figsize=(8, 8), facecolor='#cc00ff')
# rainbow
# 这里的len(sizes)是选择的颜色的个数,也是绘制饼图的数据个数,
# 此处参数通常写为np.arange(len(sizes))/len(sizes)形式,不用纠结太多关于其用法。
colors = cm.rainbow(np.arange(len(sizes))/len(sizes))
patches, texts, autotexts = ax.pie(sizes, labels=labels, autopct='%1.0f%%',
startangle=180,
colors=colors,
pctdistance=0.8,
textprops={'fontsize': 15, 'color': '#8B1A1A'},
)
ax.set_title('部分地区某指标占比图', loc='center', fontsize=25, color='blue')
plt.show()
图像效果如下:
除此之外,也可以调用cm模块的get_cmap()方法来完成。可以对该方法有所了解(小啾觉得上边展示的方法是更为方便的)。
以Paired颜色地图 为例:
以颜色地图autumn为例:
以颜色地图gray为例:
以颜色地图spring为例:
等高线
绘制等高线图使用的是matplotlib.pyplot的contourf()方法。
该函数语法如下:
plt.contourf(X, Y, f(X,Y))
其中 X和Y都是二维数组。(meshgrid()方法作用后的 网格化 形式)
f(X,Y)指的是对X、和Y使用f()函数进行计算的结果,计算的结果作为该坐标点的高度。
一段可以参考的示例代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 计算x,y坐标对应的高度值
def fun(x, y):
return (1-x/2+x**2+y**3) * np.exp(-x**2-y**2)
# 设置个背景色
plt.figure(facecolor='#66ff33')
n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
# 把x,y数据转换为二维数据(网格化)
X, Y = np.meshgrid(x, y)
# 填充等高线
plt.contourf(X, Y, fun(X, Y))
# 显示图表
plt.show()
其中fun(x, y)是计算高度的公式,可以根据我们的需求自由定制。
绘制出的图像效果呈现如下:
到此这篇关于基于Python+Matplotlib绘制渐变色扇形图与等高线图的文章就介绍到这了!
Python Matplotlib绘制等高线图与渐变色扇形图
- Author -
侯小啾- Original Sources -
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@