Python数据可视化科技图表绘制系列教程(二)

目录

表格风格图

使用Seaborn函数绘图

设置图表风格

设置颜色主题

图表分面

绘图过程

使用绘图函数绘图

定义主题

分面1

分面2


【声明】:未经版权人书面许可,任何单位或个人不得以任何形式复制、发行、出租、改编、汇编、传播、展示或利用本博客的全部或部分内容,也不得在未经版权人授权的情况下将本博客用于任何商业目的。但版权人允许个人学习、研究、欣赏等非商业性用途的复制和传播。非常推荐大家学习《Python数据可视化科技图表绘制》这本书籍。

表格风格图

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors as mcolors
from matplotlib.patches import Rectanglenp.random.seed(19781101)			# 固定随机种子,以便结果可复现def plot_scatter(ax,prng,nb_samples=100):"""绘制散点图"""for mu,sigma,marker in [(-.5,0.75,'o'),(0.75,1.,'s')]:x,y=prng.normal(loc=mu,scale=sigma,size=(2,nb_samples))ax.plot(x,y,ls='none',marker=marker)ax.set_xlabel('X-label')ax.set_title('Axes title')return axdef plot_colored_lines(ax):"""绘制颜色循环线条"""t=np.linspace(-10,10,100)def sigmoid(t,t0):return 1/(1+np.exp(-(t-t0)))nb_colors=len(plt.rcParams['axes.prop_cycle'])shifts=np.linspace(-5,5,nb_colors)amplitudes=np.linspace(1,1.5,nb_colors)for t0,a in zip(shifts,amplitudes):ax.plot(t,a*sigmoid(t,t0),'-')ax.set_xlim(-10,10)return axdef plot_bar_graphs(ax,prng,min_value=5,max_value=25,nb_samples=5):"""绘制两个并排的柱状图。"""x=np.arange(nb_samples)ya,yb=prng.randint(min_value,max_value,size=(2,nb_samples))width=0.25ax.bar(x,ya,width)ax.bar(x+width,yb,width,color='C2')ax.set_xticks(x+width,labels=['a','b','c','d','e'])return axdef plot_colored_circles(ax,prng,nb_samples=15):"""绘制彩色圆形。"""for sty_dict,j in zip(plt.rcParams['axes.prop_cycle'](),range(nb_samples)):ax.add_patch(plt.Circle(prng.normal(scale=3,size=2),radius=1.0,color=sty_dict['color']))ax.grid(visible=True)# 添加标题以启用网格plt.title('ax.grid(True)',family='monospace',fontsize='small')ax.set_xlim([-4,8])ax.set_ylim([-5,6])ax.set_aspect('equal',adjustable='box')			# 绘制圆形return axdef plot_image_and_patch(ax,prng,size=(20,20)):"""绘制图像和圆形补丁。"""values=prng.random_sample(size=size)ax.imshow(values,interpolation='none')c=plt.Circle((5,5),radius=5,label='patch')ax.add_patch(c)# 移除刻度ax.set_xticks([])ax.set_yticks([])def plot_histograms(ax,prng,nb_samples=10000):"""绘制四个直方图和一个文本注释。"""params=((10,10),(4,12),(50,12),(6,55))for a,b in params:values=prng.beta(a,b,size=nb_samples)ax.hist(values,histtype="stepfilled",bins=30,alpha=0.8,density=True)# 添加小注释。ax.annotate('Annotation',xy=(0.25,4.25),xytext=(0.9,0.9),textcoords=ax.transAxes,va="top",ha="right",bbox=dict(boxstyle="round",alpha=0.2),arrowprops=dict(arrowstyle="->",connectionstyle="angle,angleA=-95,angleB=35,rad=10"),)return axdef plot_figure(style_label=""):"""设置并绘制具有给定样式的演示图。"""# 在不同的图之间使用专用的RandomState实例绘制相同的“随机”值prng=np.random.RandomState(96917002)# 创建具有特定样式的图和子图fig,axs=plt.subplots(ncols=6,nrows=1,num=style_label,figsize=(14.8,2.8),layout='constrained')# 添加统一的标题,标题颜色与背景颜色相匹配background_color=mcolors.rgb_to_hsv(mcolors.to_rgb(plt.rcParams['figure.facecolor']))[2]if background_color<0.5:title_color=[0.8,0.8,1]else:title_color=np.array([19,6,84])/256fig.suptitle(style_label,x=0.01,ha='left',color=title_color,fontsize=14,fontfamily='DejaVu Sans',fontweight='normal')plot_scatter(axs[0],prng)plot_image_and_patch(axs[1],prng)plot_bar_graphs(axs[2],prng)plot_colored_lines(axs[3])plot_histograms(axs[4],prng)plot_colored_circles(axs[5],prng)# 添加分隔线rec=Rectangle((1+0.025,-2),0.05,16,clip_on=False,color='gray')axs[4].add_artist(rec)# 保存图片plt.savefig(f'{style_label}.png', dpi=600)plt.close(fig)  # 关闭当前图形以避免内存占用过多if __name__=="__main__":# 获取所有可用的样式列表,按字母顺序排列style_list=['default','classic']+sorted(style for style in plt.style.availableif style !='classic' and not style.startswith('_'))# 绘制每种样式的演示图for style_label in style_list:with plt.rc_context({"figure.max_open_warning":len(style_list)}):with plt.style.context(style_label):plot_figure(style_label=style_label)plt.show()
表格风格图_bmh
表格风格图_classic
表格风格图_dark_background
表格风格图_default
表格风格图_fast
表格风格图_fivethirtyeight
表格风格图_ggplot
表格风格图_grayscale
表格风格图_petroff10
表格风格图_seaborn-v0_8
表格风格图_seaborn-v0_8-bright
表格风格图_seaborn-v0_8-colorblind
表格风格图_seaborn-v0_8-dark
表格风格图_seaborn-v0_8-darkgrid
表格风格图_seaborn-v0_8-dark-palette
表格风格图_seaborn-v0_8-deep
表格风格图_seaborn-v0_8-muted
表格风格图_seaborn-v0_8-notebook
表格风格图_seaborn-v0_8-paper
表格风格图_seaborn-v0_8-pastel
表格风格图_seaborn-v0_8-poster
表格风格图_seaborn-v0_8-talk
表格风格图_seaborn-v0_8-ticks
表格风格图_seaborn-v0_8-white
表格风格图_seaborn-v0_8-whitegrid
表格风格图_Solarize_Light2
表格风格图_tableau-colorblind10

使用Seaborn函数绘图

import seaborn as sns
import matplotlib.pyplot as plt# 加载数据集
iris=sns.load_dataset("iris",data_home='seaborn-data',cache=True)
tips=sns.load_dataset("tips",data_home='seaborn-data',cache=True)
car_crashes=sns.load_dataset("car_crashes",data_home='seaborn-data',cache=True)
penguins=sns.load_dataset("penguins",data_home='seaborn-data',cache=True)
diamonds=sns.load_dataset("diamonds",data_home='seaborn-data',cache=True)plt.figure(figsize=(15,8))				# 设置画布
# 第1幅图:iris数据集的散点图
plt.subplot(2,3,1)
sns.scatterplot(x="sepal_length",y="sepal_width",hue="species",data=iris)
plt.title("Iris scatterplot")# 第2幅图:tips 数据集的箱线图
plt.subplot(2,3,2)
tips=sns.load_dataset("tips",data_home='seaborn-data',cache=True)
sns.boxplot(x="day",y="total_bill",hue="smoker",data=tips)
plt.title("Tips boxplot")# 第3幅图:tips 数据集的小提琴图
plt.subplot(2,3,3)
sns.violinplot(x="day",y="total_bill",hue="smoker",data=tips)
plt.title("Tips violinplot")# 第4幅图:car_crashes 数据集的直方图
plt.subplot(2,3,4)
sns.histplot(car_crashes['total'],bins=20)
plt.title("Car Crashes histplot")# 第5幅图:penguins 数据集的点图
plt.subplot(2,3,5)
sns.pointplot(x="island",y="bill_length_mm",hue="species",data=penguins)
plt.title("Penguins pointplot")# 第6幅图:diamonds 数据集的计数图
plt.subplot(2,3,6)
sns.countplot(x="cut",data=diamonds)
plt.title("Diamonds countplot")plt.tight_layout()# 保存图片
plt.savefig('P75使用Seaborn函数绘图.png', dpi=600, transparent=True)
plt.show()
使用Seaborn函数绘图

设置图表风格

import seaborn as sns
import matplotlib.pyplot as pltsns.set_style("darkgrid")			# 设置图表风格为 darkgrid
iris=sns.load_dataset("iris")		# 加载 iris 数据集# 绘制花瓣长度与宽度的散点图
sns.scatterplot(x="petal_length",y="petal_width",hue="species",data=iris)
plt.title("Scatter Plot of Petal Length vs Petal Width")# 保存图片
plt.savefig('P77设置图表风格.png', dpi=600, transparent=True)
plt.show()
设置图表风格

设置颜色主题

import seaborn as sns
import matplotlib.pyplot as pltsns.set_palette("deep")				# 设置颜色主题为deep
tips=sns.load_dataset("tips")		# 加载 tips 数据集# 绘制小费金额的小提琴图,按照就餐日期和吸烟者区分颜色
sns.violinplot(x="day",y="total_bill",hue="smoker",data=tips)
plt.title("Tips violinplot")		# 设置图表标题# 保存图片
plt.savefig('P78设置颜色主题.png', dpi=600, transparent=True)
plt.show()
设置颜色主题

图表分面

import seaborn as sns
import matplotlib.pyplot as pltiris=sns.load_dataset("iris")			# 加载iris数据集# 创建 FacetGrid 对象,按照种类('species')进行分面
g=sns.FacetGrid(iris,col="species",margin_titles=True)
# 在每个子图中绘制花萼长度与花萼宽度的散点图
g.map(sns.scatterplot,"sepal_length","sepal_width")
g.set_axis_labels("Sepal Length","Sepal Width")		# 设置子图标题# 保存图片
plt.savefig('P80图表分面.png', dpi=600, transparent=True)
plt.show()
图表分面

绘图过程

from plotnine import *
import seaborn as sns
import warnings# 忽略 PlotnineWarning
warnings.filterwarnings("ignore", category=UserWarning, module="plotnine")# 加载数据集
penguins = sns.load_dataset("penguins", data_home='seaborn-data', cache=True)# 检查并处理缺失值
penguins = penguins.dropna()# 创建画布和导入数据
p = ggplot(penguins, aes(x='bill_length_mm', y='bill_depth_mm', color='species'))# 添加几何对象图层-散点图,并进行美化
p = p + geom_point(size=3, alpha=0.7)# 设置标度
p = p + scale_x_continuous(name='Length (mm)')
p = p + scale_y_continuous(name='Depth (mm)')# 设置主题和其他参数
p = p + theme(legend_position='top', figure_size=(6, 4))# 保存绘图
ggsave(p, filename="P82绘图过程.png", width=6, height=4, dpi=600)
绘图过程

使用绘图函数绘图

import warnings
from plotnine import *
from plotnine.data import *# 忽略 PlotnineWarning
warnings.filterwarnings("ignore", category=UserWarning, module="plotnine")# 散点图-mpg 数据集
p1 = (ggplot(mpg) +aes(x='displ', y='hwy') +geom_point(color='blue') +labs(title='Displacement vs Highway MPG') +theme(plot_title=element_text(size=14, face='bold')))# 箱线图-diamonds 数据集
p2 = (ggplot(diamonds.sample(1000)) +aes(x='cut', y='price', fill='cut') +geom_boxplot() +labs(title='Diamond Price by Cut') +scale_fill_brewer(type='qual', palette='Pastel1') +theme(plot_title=element_text(size=14, face='bold')))# 直方图-msleep 数据集
p3 = (ggplot(msleep) +aes(x='sleep_total') +geom_histogram(bins=20, fill='green', color='black') +labs(title='Total Sleep in Mammals') +theme(plot_title=element_text(size=14, face='bold')))# 线图-economics 数据集
p4 = (ggplot(economics) +aes(x='date', y='unemploy') +geom_line(color='red') +labs(title='Unemployment over Time') +theme(plot_title=element_text(size=14, face='bold')))# 条形图-presidential 数据集
presidential['duration'] = (presidential['end'] - presidential['start']).dt.days
p5 = (ggplot(presidential) +aes(x='name', y='duration', fill='name') +geom_bar(stat='identity') +labs(title='Presidential Terms Duration') +scale_fill_hue(s=0.90, l=0.65) +theme(axis_text_x=element_text(rotation=90, hjust=1),plot_title=element_text(size=14, face='bold')))# 折线图-midwest 数据集
p6 = (ggplot(midwest) +aes(x='area', y='popdensity') +geom_line(color='purple') +labs(title='Population Density vs Area') +theme(plot_title=element_text(size=14, face='bold')))# 保存图片
plots = [p1, p2, p3, p4, p5, p6]
plot_names = ['scatter_plot', 'boxplot', 'histogram', 'line_plot', 'bar_plot', 'line_chart']for plot, name in zip(plots, plot_names):plot.save(f'P85使用绘图函数绘图_{name}.png', width=8, height=6, dpi=600, transparent=True)
使用绘图函数绘图_bar_plot
使用绘图函数绘图_boxplot
使用绘图函数绘图_histogram
使用绘图函数绘图_line_chart
使用绘图函数绘图_line_plot
使用绘图函数绘图_scatter_plot

定义主题

from plotnine import *
from plotnine.data import mpg# 创建散点图
p = (ggplot(mpg, aes(x='displ', y='hwy', color='displ')) +geom_point() +  # 添加点图层scale_color_gradient(low='blue', high='red') +  # 设置颜色渐变labs(title='Engine Displacement vs. Highway MPG',  # 设置图表标题x='Engine Displacement (L)',  # 设置x轴标题y='Miles per Gallon (Highway)') +  # 设置y轴标题theme_minimal() +  # 使用最小主题theme(axis_text_x=element_text(angle=45, hjust=1),  # 自定义x轴文字样式axis_text_y=element_text(color='darkgrey'),  # 自定义y轴文字样式plot_background=element_rect(fill='whitesmoke'),  # 自定义图表背景色panel_background=element_rect(fill='white', color='black', size=0.5),  # 自定义面板背景和边框panel_grid_major=element_line(color='lightgrey'),  # 自定义主要网格线颜色panel_grid_minor=element_line(color='lightgrey', linestyle='--'),  # 自定义次要网格线样式legend_position='right',  # 设置图例位置figure_size=(8, 6)))  # 设置图形大小# 保存图片
p.save('P88定义主题.png', dpi=600, transparent=True)# 显示图形
print(p)
定义主题

分面1

from plotnine import *
from plotnine.data import mpg# 创建散点图并按照`class`变量进行分面,添加颜色渐变
p = (ggplot(mpg, aes(x='displ', y='hwy', color='displ')) +geom_point() +scale_color_gradient(low='blue', high='orange') +  # 添加颜色渐变facet_wrap('~class') +  # 按照汽车类型分面labs(title='Engine Displacement vs. Highway MPG by Vehicle Class',x='Engine Displacement (L)',y='Miles per Gallon (Highway)'))# 保存图片
p.save('P89分面1.png', dpi=600, transparent=True)# 显示图片
p.draw()
分面1

分面2

from plotnine import *
from plotnine.data import mpg# 创建散点图并按照class变量进行分面,根据drv变量映射颜色
p=(ggplot(mpg,aes(x='displ',y='hwy',color='drv'))+geom_point()+						# 添加点图层scale_color_brewer(type='qual',palette='Set1')+	# 使用定性的颜色方案facet_grid('drv ~ class')+			# 行是驱动类型,列是汽车类型labs(title='Engine Displacement vs. Highway MPG by Vehicle Class',x='Engine Displacement (L)',y='Miles per Gallon (Highway)')+theme_light()+ 						# 使用亮色主题theme(figure_size=(10,6),			# 调整图形大小strip_text_x=element_text(size=10,color='black',angle=0),# 自定义分面标签的样式legend_title=element_text(color='blue',size=10),# 自定义图例标题的样式legend_text=element_text(size=8),		# 自定义图例文本的样式legend_position='right'))	# 调整图例位置# 保存图片
p.save('P90分面2.png', dpi=600, transparent=True)# 显示图片
p.draw()
分面2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/85707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode算法题 (搜索二维矩阵)Day18!!!C/C++

https://leetcode.cn/problems/search-a-2d-matrix/description/ 一、题目分析 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 ta…

猎板硬金镀层厚度:新能源汽车高压系统的可靠性基石

在新能源汽车的电池管理系统&#xff08;BMS&#xff09;和电机控制器中&#xff0c;硬金镀层厚度直接关系到高压环境下的电气稳定性与使用寿命。猎板针对车载场景开发的耐电迁移方案&#xff08;金层 2.5μm&#xff0c;镍层 8μm&#xff09;&#xff0c;经 150℃/85% RH 高压…

亚马逊站内信规则2025年重大更新:避坑指南与合规策略

亚马逊近期对Buyer-Seller Messaging&#xff08;买家-卖家站内信&#xff09;规则进行了显著收紧&#xff0c;明确将一些曾经的“灰色操作”列为违规。违规操作轻则收到警告&#xff0c;重则导致账户暂停或绩效受限。本文为您全面解析本次规则更新的核心要点、背后逻辑&#x…

WPF可拖拽ListView

1.控件描述 WPF实现一个ListView控件Item子项可删除也可拖拽排序&#xff0c;效果如下图所示 2.实现代码 配合 WrapPanel 实现水平自动换行&#xff0c;并开启拖拽 <ListViewx:Name"listView"Grid.Row"1"Width"300"AllowDrop"True&…

相机--双目立体相机

教程 链接1 教程汇总 立体匹配算法基础概念 视频讲解摄像机标定和双目立体原理 两个镜头。 双目相机也叫立体相机--Stereo Camera&#xff0c;属于深度相机。 作用 1&#xff0c;获取图像特征&#xff1b; 2&#xff0c;获取图像深度信息&#xff1b; 原理 原理和标定 …

Unity3D仿星露谷物语开发59之定制角色衬衫

1、目标 自定义角色衬衫、裤子、手臂颜色。 2、概念 在Assets -> Sprites -> Output Textures下&#xff0c;Customised_farmer为目前角色所用的精灵表。 如果上面是输出纹理&#xff0c;那么输入纹理是什么呢&#xff1f;它位于Assets/Sprites/Sprite Textures/Chara…

【HarmonyOS 5】游戏开发教程

一、开发环境搭建 ‌工具配置‌ 安装DevEco Studio 5.1&#xff0c;启用CodeGenie AI助手&#xff08;Settings → Tools → AI Assistant&#xff09;配置游戏模板&#xff1a;选择"Game"类型项目&#xff0c;勾选手机/平板/折叠屏多设备支持 二、游戏引擎核心架构…

深度探索:如何用DeepSeek重构你的工作流

前言:AI时代的工作革命 在人工智能浪潮席卷的今天,DeepSeek作为国产大模型的代表之一,正以其强大的自然语言处理能力、代码生成能力和多模态交互特性,重新定义着人类的工作方式。根据IDC报告显示,2024年企业级AI应用市场规模已突破800亿美元,其中智能办公场景占比达32%,…

Linux 进程调度与管理:从内核管理到调度机制的深度解析

文章目录 引言一、进程基础&#xff1a;概念与核心数据结构1.1 进程的本质&#xff1a;程序的动态化身1.2 进程控制块&#xff08;PCB&#xff09;&#xff1a;内核管理的灵魂1.2.1 链表节点嵌入1.2.2 链表操作宏1.2.3 全局链表管理 1.3 进程查看与系统调用1.3.1 通过系统调用获…

信息学奥赛一本通 1570:【例 2】能量项链 | 1843:【06NOIP提高组】能量项链 | 洛谷 P1063 [NOIP 2006 提高组] 能量项链

【题目链接】 ybt 1570&#xff1a;【例 2】能量项链 ybt 1843&#xff1a;【06NOIP提高组】能量项链 洛谷 P1063 [NOIP 2006 提高组] 能量项链 【题目考点】 1. 动态规划&#xff1a;区间动规 2. 环形序列 解决方法&#xff1a;破环为链 模板题&#xff1a;洛谷 P1880 [N…

旅游微信小程序制作指南

想创建旅游微信小程序吗&#xff1f;知道旅游业企业怎么打造自己的小程序吗&#xff1f;这里有零基础小白也能学会的教程&#xff0c;教你快速制作旅游类微信小程序&#xff01; 旅游行业能不能开发微信小程序呢&#xff1f;答案是肯定的。微信小程序对旅游企业来说可是个宝&am…

Vue3+Vite中lodash-es安装与使用指南

在 Vue 3 Vite 项目中安装和使用 lodash-es 的详细指南如下&#xff1a; 一、为什么选择 lodash-es&#xff1f; ES 模块支持&#xff1a;lodash-es 以原生 ES 模块格式发布&#xff0c;支持现代构建工具的 Tree Shaking 按需加载&#xff1a;只引入需要的函数&#xff0c;显…

法律模型选型

当然可以&#xff0c;以下是关于法律法规相关模型的技术选型调研建议&#xff0c;适合算法实习生从0入手&#xff0c;并能交付有深度的调研报告&#xff1a; 一、调研背景与目标 目标&#xff1a;调研用于处理法律法规类任务的大模型与技术方案&#xff0c;明确适合本团队的模…

软件工程专业的本科生应该具备哪些技能

软件工程专业的本科生需要具备扎实的技术基础、良好的开发流程认知和一定的软技能&#xff0c;以适应软件开发行业的需求。以下从技术技能、开发流程与工具、软技能、实践能力等维度整理核心技能清单&#xff0c;供参考&#xff1a; 一、核心技术技能 1. 编程语言 - 必学基础语…

[Java 基础]类,面向对象的蓝图

首先需要区分类和对象都是啥&#xff1f; 类&#xff1a;类是一个模板&#xff0c;它描述一类对象的行为和状态&#xff0c;类这个概念更像是下定义&#xff0c;更像是模板&#xff08;橡皮泥膜具&#xff09;。 对象&#xff1a;对象&#xff08;不是女朋友&#xff09;是类…

selenium-自动更新谷歌浏览器驱动

1、简介 selenium最初是一个自动化测试工具&#xff0c;而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题&#xff0c;因为有些网页数据是通过JavaScript动态加载的。selenium本质是通过驱动浏览器&#xff0c;完全模拟浏览器的操作&#xff0c;比如输入…

java从azure中读取用户信息

以下是用 Java 从 Azure AD 获取用户信息的完整实现方案&#xff0c;使用 Spring Boot 框架和 Microsoft 身份验证库 (MSAL)&#xff1a; 1. 添加 Maven 依赖 <dependencies> <!-- Spring Boot Web --> <dependency> <groupId>org.…

C# 数据库访问与ORM框架全面指南:从ADO.NET到Entity Framework Core

在现代应用开发中&#xff0c;数据持久化是核心需求之一。作为.NET生态系统中的主力语言&#xff0c;C#提供了丰富多样的数据库访问技术和工具。本文将全面探讨C#中的数据库访问方式&#xff0c;重点介绍三种主流ORM&#xff08;对象关系映射&#xff09;框架&#xff1a;Entit…

day19 leetcode-hot100-37(二叉树2)

104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; 1.深度优先遍历&#xff08;递归&#xff09;ps:不好理解&#xff0c;所以我一般不喜欢用递归 思路 典型算法&#xff0c;用递归求出高度&#xff0c;每次都是深度优先。 具体算法 /*** Definition for a bi…

【LLMs篇】13:LLaDA—大型语言扩散模型

栏目内容论文标题大型语言扩散模型 (Large Language Diffusion Models)核心思想提出LLaDA&#xff0c;一种基于扩散模型的LLM&#xff0c;通过前向掩码和反向预测过程建模语言分布&#xff0c;挑战自回归模型&#xff08;ARM&#xff09;在LLM领域的主导地位&#xff0c;并展示…