IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 绘图杂记【21】Python 绘制折扇图、嵌套环图、山峦图 -> 正文阅读

[Python知识库]绘图杂记【21】Python 绘制折扇图、嵌套环图、山峦图

学习、修改、参考自:
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')

在这里插入图片描述
更多请查看参看文章

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:39:47  更:2021-11-11 12:40:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:36:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码