绘图杂记21Python 绘制折扇图嵌套环图山峦图
Posted 卖山楂啦prss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绘图杂记21Python 绘制折扇图嵌套环图山峦图相关的知识,希望对你有一定的参考价值。
学习、修改、参考自:
https://mp.weixin.qq.com/s/lP_zc3moRpoccBYAWIFR1Q
import pandas as pd
import numpy as np
from palettable.colorbrewer.colorbrewer import get_map
import matplotlib.pyplot as plt
# 正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
values = np.arange(10,0,-1)*100 # 从大到小排序
labels = ["北京","广东", "浙江", "江苏", "四川", "湖北", "上海", "深圳", "重庆", "天津"]
# 计算坐标
width = 2*np.pi/len(labels)
theta = np.linspace(0, 2*np.pi, len(labels), endpoint=False) + width/2
# 色板为Spectral
colors = get_map("Spectral", "diverging", len(labels), reverse=True).hex_colors
#绘图
fig = plt.figure(figsize=(8, 8), dpi=100)
ax = fig.add_subplot(111, projection="polar")
ax.bar(theta, values, width=width, color=colors, alpha=0.8)
# 添加文字标签
for i,j in zip(range(len(labels)),colors):
ax.text(theta[i], values[i] + 120,
"{}\\n{}亿".format(labels[i], values[i]),fontsize=14-i*2/3,
color=j, va="center", ha="center")
ax.set_theta_direction(1) # 设置旋转方向
ax.set_theta_offset(np.pi/1) # 设置旋转起点
ax.set_axis_off() # 隐藏坐标轴
ax.set_title("折扇图", fontsize=20);
import pandas as pd
import numpy as np
from palettable.colorbrewer.colorbrewer import get_map
import matplotlib.pyplot as plt
# 正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 外圈
labels1 = ['重庆', '北京', '天津', '上海']
values1 = [200, 160, 150, 100]
# 内圈
labels2 = [
['渝北区', '江北区', '巴南区'],
['朝阳区', '西城区', '丰台区'],
['和平区', '河东区', '河西区'],
['黄浦区', '长宁区', '虹口区']]
values2 = [
[100, 60, 40], # 从大到小排序
[100, 40, 20],
[100, 40, 10],
[60, 20, 20]]
colors1 = ['#177cb0', '#9d2933', '#0aa344', '#E6550D']
colors2 = [
['#2894FF', '#84C1FF', '#C4E1FF'],
['#db5a6b', '#f47983', '#ffb3a7'],
['#73C08B','#A8E0B7', '#CBEAD1'],
['#ff7500', '#FDAE6B', '#FFE4B5']]
# 绘图
fig, ax = plt.subplots(figsize=(9,9))
# 绘制外层饼图
ax.pie(x=values1,
labels=labels1,
explode=[0.01]*len(labels1),
colors=colors1, #颜色
startangle=180,
labeldistance=1.06,
textprops={'fontsize': 20},
wedgeprops={'alpha': 0.8, 'width': 0.2}
)
# 内层饼图
ax.pie(x=flatten(values2),
labels=flatten(labels2), # 标签
explode=[0.01]*len(flatten(labels2)),
colors=flatten(colors2), # 颜色
labeldistance=0.75,
startangle=180,
radius=0.79, # 内圈距外圈距离
textprops={'va': 'center', 'ha': 'center','fontsize': 14},
rotatelabels=True,
wedgeprops={'alpha': 0.8, 'width': 0.4}
)
fig.set_facecolor('white');
import pandas as pd
import numpy as np
from scipy import stats
from matplotlib import ticker
from palettable.colorbrewer.colorbrewer import get_map
import matplotlib.pyplot as plt
# 正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
def plot_ridges(ax, X, Y1, buttoms, labels, colors, **kw):
if np.array(X).ndim == 1:
X = [X]*len(Y1) # X可以与Y形状相同,也可以是1个序列
n = 0
for y in Y1:
y = np.array(y) - np.min(np.array(y)) # 去除基线
# fill_between将曲线下面的部分进行填色
# X[n] 覆盖的区域
# y + buttoms[n] 覆盖的下限
ax.fill_between(X[n], y + buttoms[n], buttoms[n], where=y>0, color=colors[n],
label=labels[n], **kw)
ax.plot(X[n], y + buttoms[n], color=colors[n])
n += 1
return ax
X = np.arange(-8, 8, 0.1) # 既可以是1个序列,也可以多个序列组成的列表
# 多个序列组成的列表
# apply_along_axis将arr数组的每一个元素经过func函数变换形成的一个新数组
# numpy.apply_along_axis(func, axis, arr, *args, **kwargs)
# fun = lambda x: stats.norm(-4,1).pdf(x)
# axis 作用于行还是列
# arr 要变换的数组
# fun中的scipy.stats.norm函数 可以实现正态分布,pdf : 概率密度函数
# stats.norm(0,1)表示均值是0,方差是1的正态分布
Y = [np.apply_along_axis(lambda x: stats.norm(0,1).pdf(x), 0, X)*2, # 方差都为1
np.apply_along_axis(lambda x: stats.norm(-2,1).pdf(x), 0, X)*2,
np.apply_along_axis(lambda x: stats.norm(-4,1).pdf(x), 0, X)*2,
np.apply_along_axis(lambda x: stats.norm(2,1).pdf(x), 0, X)*2,
np.apply_along_axis(lambda x: stats.norm(4,1).pdf(x), 0, X)*2]
colors = get_map("Set2", "qualitative", len(Y), reverse=False).hex_colors # 设置颜色
buttoms = [0, 1, 2, 3, 4] # 设置基线偏移,长度与Y一致(将每一个分布图分离)
labels = ["y1", "y2", "y3", "y4", "y5"] # 图例标签,长度与Y一致
# 绘图
fig, ax = plt.subplots(figsize=(10, 10))
plot_ridges(ax, X, Y, buttoms, labels, colors)
ax.legend(loc='best', title="图例")# 图例
ax.yaxis.set_major_locator(ticker.NullLocator()) # 隐藏刻度
ax.set_title("山峦图", fontdict={'fontsize': 15},backgroundcolor='#ffc773',fontweight='bold',color='white')
更多请查看参考文章
以上是关于绘图杂记21Python 绘制折扇图嵌套环图山峦图的主要内容,如果未能解决你的问题,请参考以下文章