【python】绘图代码模板

【python】绘图代码模板

  • pandas.DataFrame.plot( )画图函数
  • Seaborn绘图 -数据可视化必备
    • 主题样式
    • 导入数据集
    • 可视化统计关系
      • 散点图
      • 抖动图
      • 箱线图
      • 小提琴图
      • Pointplot
      • 群图
    • 可视化数据集的分布
      • 绘制单变量分布
        • 柱状图
        • 直方图
      • 绘制双变量分布
        • Hex图
        • KDE 图
        • 可视化数据集中的成对关系
    • 好看的图模板
      • 来自宽格式数据集的线图
      • 带观察值的水平箱线图
      • 多个面上的线图
      • 具有多种语义的散点图
    • 问题解决方案
      • 解决seaborn绘图无法显示中文等问题

pandas.DataFrame.plot( )画图函数

DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, sharex=None, sharey=False, layout=None,figsize=None, use_index=True, title=None, grid=None, legend=True, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None,xerr=None,secondary_y=False, sort_columns=False, **kwds)

以下是DataFrame.plot()方法的参数以及它们的作用和可选值:

  • x:横轴的列名或位置索引,用于指定绘图时使用的横轴数据。

  • y:纵轴的列名或位置索引,用于指定绘图时使用的纵轴数据。

  • kind:绘图类型,可以是以下选项:

    • 'line':折线图
    • 'bar':垂直条形图
    • 'barh':水平条形图
    • 'hist':直方图
    • 'box':箱线图
    • 'kde':核密度估计图
    • 'density':与 'kde' 相同
    • 'area':面积图
    • 'pie':饼图
    • 'scatter':散点图
    • 'hexbin':六边形散点图
  • ax:Matplotlib Axes对象,用于在已有的图形上添加新的图层。

  • subplots:布尔值,如果为True,则为每个列绘制单独的子图。

  • sharex:布尔值,如果subplots为True,则共享x轴。

  • sharey:布尔值,如果subplots为True,则共享y轴。

  • layout:元组,用于指定子图的行列布局。

  • figsize:元组,图形的尺寸,以英寸为单位。

  • use_index:布尔值,默认为True,使用行索引作为x轴。

  • title:字符串,图形的标题。

  • grid:布尔值,控制是否显示网格线。

  • legend:布尔值或者字符串’reverse’,控制是否显示图例。

  • style:列表或字典,用于指定每列折线图的线条样式。

  • logx:布尔值,是否使用对数坐标轴(x轴)。

  • logy:布尔值,是否使用对数坐标轴(y轴)。

  • loglog:布尔值,是否同时使用对数坐标轴(x轴和y轴)。

  • xticks:序列,用于自定义x轴刻度值。

  • yticks:序列,用于自定义y轴刻度值。

  • xlim:列表或元组,自定义x轴显示范围。

  • ylim:列表或元组,自定义y轴显示范围。

  • rot:整数,设置刻度标签的旋转角度。

  • fontsize:整数,设置刻度标签的字体大小。

  • colormap:字符串或Matplotlib colormap对象,默认为None,用于选择图的区域颜色。

  • colorbar:布尔值,如果为True,则在柱状图和散点图上添加颜色条。

  • position:浮点数,用于指定条形图布局的相对对齐位置(0表示左端/底端,1表示右端/顶端)。

  • table:布尔值、Series或DataFrame,默认为False,如果为True,则根据DataFrame的数据绘制表格。

  • yerrxerr:DataFrame、Series、数组或字典,用于绘制带有误差条的图表(详情请参考绘图带有误差条的方法)。

  • stacked:布尔值,在折线图和柱状图中默认为False,在面积图中默认为True,用于创建堆叠图。

  • sort_columns:布尔值,默认为False,以字母表顺序绘制各列,默认使用前列顺序。

  • secondary_y:布尔值或序列,默认为False,是否在右侧添加第二个y轴。如果是序列,指定要在右侧绘制的列。

  • mark_right:布尔值,默认为True,当使用第二个y轴时,是否自动在图例中标记列标签为"(right)"。

  • **kwds:其他传递给Matplotlib绘图方法的关键字参数。

返回值:

  • axes:Matplotlib AxesSubplot对象或其数组。

示例:

import pandas as pd
import matplotlib.pyplot as plt# 创建示例数据
data = {'Year': [2015, 2016, 2017, 2018, 2019, 2020, 2021],'Sales': [100, 120, 150, 180, 200, 230, 250],'Expenses': [80, 90, 100, 110, 120, 130, 140]
}df = pd.DataFrame(data)# 绘制折线图
df.plot(x='Year', y=['Sales', 'Expenses'], kind='line', marker='o', linewidth=2)
plt.title('Sales and Expenses Over Years')
plt.xlabel('Year')
plt.ylabel('Amount (in thousands)')
plt.grid(True)
plt.legend(['Sales', 'Expenses'])
plt.show()# 绘制条形图
df.plot(x='Year', y=['Sales', 'Expenses'], kind='bar', alpha=0.7)
plt.title('Sales and Expenses Over Years')
plt.xlabel('Year')
plt.ylabel('Amount (in thousands)')
plt.grid(axis='y')
plt.legend(['Sales', 'Expenses'])
plt.show()

在这里插入图片描述
在这里插入图片描述

Seaborn绘图 -数据可视化必备

官方示例:https://seaborn.pydata.org/tutorial.html
Seaborn是一个构建在matplotlib之上的一个非常完美的Python可视化库。
与Matplotlib的低级接口相比,Seaborn具有高级接口。适合处理数据流

主题样式

Seaborn 有五个预设的主题样式:darkgrid、whitegrid、dark、white 和 ticks。这些主题样式可通过 sns.set(style='样式名')sns.set_style('样式名') 命令切换

darkgrid 主题,显示灰色背景带网格线,无坐标轴刻度线。# 默认主题,可简写为 sns.set()
whitegrid 主题,显示白色背景带网格线,无坐标轴刻度线。
dark 主题,显示灰色背景无网格线,无坐标轴刻度线。
white 主题,显示白色背景无网格线,无坐标轴刻度线。
ticks 主题,显示白色背景无网格线,有坐标轴刻度线

需要导入的包

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from scipy import stats

导入数据集

数据来源:https://datahack.analyticsvidhya.com/contest/enigma­codefest­machine­learning­1/

df = pd.read_csv(r"train_NIR5Yl1.csv")
df.head()

在这里插入图片描述

可视化统计关系

散点图

散点图可以可视化两个变量之间的关系。每个点在数据集中显示一个观察值,这些观察值用点状结构表示。图中显示了两个变量的联合分布。


# 创建图形和轴
sns.relplot(x="Views", y="Upvotes", data = df)

在这里插入图片描述
显示与数据相关的标签

sns.relplot(x="Views", y="Upvotes", hue = "Tag", data = df)
# 另外还可以通过参数size = "Tag"或者数size=(15,200)。,改变点大小

在这里插入图片描述
另外可以在色调(Hue)的帮助下在我们的图片中添加另一个维度,通过为点赋予颜色来实现,每种颜色都有一些附加的意义。

sns.relplot(x="Views", y="Upvotes", hue = "Answers", data = df);

在这里插入图片描述

抖动图

使用的数据来源:https://datahack.analyticsvidhya.com/contest/wns­analytics­hackathon­2018­1/

在这里插入图片描述
使用catplot()函数查看education列和avg_training_score列之间的关系

sns.catplot(x="education", y="avg_training_score", jitter = False, data=df2)

在这里插入图片描述

在Seaborn的catplot函数中,jitter参数控制是否对数据点进行抖动(jittering)。抖动是在分类变量上添加一些随机的小偏移量,使得数据点在x轴上稍微分散,从而防止多个数据点重叠在同一个位置,增加可视化的可读性。

  • jitter=True:表示在x轴上对数据进行抖动。这样做可以有效避免数据点的重叠,特别是当数据较密集时,使得图表更易于观察和解读。

  • jitter=False:表示不对数据进行抖动。如果你的数据不太密集,或者你更关心各个数据点的精确位置,可以选择这个选项。

选择是否使用抖动取决于数据的特点和你想要达到的可视化效果。对于大多数情况下,启用抖动是一个好的选择,因为它可以帮助更好地展示数据的分布情况。然而,如果你的数据较少或者有特定需求,可以将jitter设置为False

Hue图
接下来,如果我们想在我们的图中引入另一个变量或另一个维度,我们可以使用hue参数。假设我们希望看到教育和avg_training_score图中的性别分布

sns.catplot(x="education", y="avg_training_score", hue = "gender", data=df2)

在这里插入图片描述
在上面的图中,一些点是相互重叠的,为了消除这种情况,可以设置kind =
“swarm”, swarm使用一种算法来防止这些点重叠,并且沿着分类轴调整这些点。

sns.catplot(x="education", y="avg_training_score", kind = "swarm", data=df2)

在这里插入图片描述
将is_promoted作为一个新变量引入

sns.catplot(x="education", y="avg_training_score", hue = "is_promoted",  kind = "swarm", data=df2)

在这里插入图片描述

箱线图

箱线图 ,它显示了分布的三个四分位值以及最终值。箱图中的每个值都对应于数据中的实际观察值

sns.catplot(x="education", y="avg_training_score", kind = "box", data=df2)

在这里插入图片描述

小提琴图

小提琴图结合了箱线图和核密度估计程序,以提供更丰富的值分布描述。四分位数值显示在小提琴内部。

sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "violin", data=df2)

在这里插入图片描述
当色调语义参数是二值时,我们还可以拆分小提琴,这也可能有助于节省绘图空间。

sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "violin",split=True, data=df2)

在这里插入图片描述

Pointplot

pointplot,这个图指出估计值和置信区间。Pointplot连接来自相同色调类别的数据。这有助于识别特定色调类别中的关系如何变化

sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "point", data=df2)

在这里插入图片描述

群图

sns.catplot(x="education",               # x轴上的分类变量,这里是教育程度y="avg_training_score",      # y轴上的数值变量,这里是平均培训分数hue="is_promoted",           # 按照是否晋升(is_promoted)来给数据点着色col="gender",                # 按照性别(gender)分列绘制图表aspect=.9,                   # 控制每个绘图块(facet)的纵横比例kind="swarm",                # 指定绘图类型为分类散点图(swarm plot)data=df2)                    # 数据来源,这里是一个DataFrame df2

在这里插入图片描述

可视化数据集的分布

绘制单变量分布

柱状图

在研究变量分布时,最常见的是柱状图。默认情况下,distplot()函数绘制柱状图并适合内核密度估计

sns.distplot(df2.age)

在这里插入图片描述

直方图

直方图以箱子的形式表示数据的分布,并使用条形图来显示每个箱子下的观察次数。我们还可以在其中添加一个加固图,而不是使用KDE(核密度估计),这意味着在每次观察时,它都会画一个小的垂直标尺。

sns.distplot(df2.age, kde=False, rug = True)

在这里插入图片描述

绘制双变量分布

使用了seaborn库的jointplot()函数。默认情况下,jointplot绘制散点图。

sns.jointplot(x="avg_training_score", y="age", data=df2);

在这里插入图片描述

Hex图

Hexplot是一个双变量的直方图,因为它显示了在六边形区域内的观察次数。这是一个非常容易处理大数据集的图。为了绘制Hexplot,我们将把kind属性设置为hex

sns.jointplot(x=df2.age, y=df2.avg_training_score, kind="hex", data = df2)

在这里插入图片描述

KDE 图

sns.jointplot(x="age", y="avg_training_score", data=df2, kind="kde");

在这里插入图片描述

可视化数据集中的成对关系

sns.pairplot(df2)

在这里插入图片描述

好看的图模板

来自宽格式数据集的线图

# 导入必要的库
import numpy as np
import pandas as pd
import seaborn as sns
sns.set_theme(style="whitegrid") # 设置Seaborn绘图的主题和样式# 创建一个随机种子,以便结果可以复现
rs = np.random.RandomState(365)# 生成一个包含随机数据的数组,形状为(365, 4),并计算每一列的累积和
values = rs.randn(365, 4).cumsum(axis=0)# 创建日期范围为2016年1月1日起的365个日期,间隔为1天
dates = pd.date_range("1 1 2016", periods=365, freq="D")# 使用Pandas将数据和日期合并为DataFrame,并给每列指定名称"A", "B", "C", "D"
data = pd.DataFrame(values, dates, columns=["A", "B", "C", "D"])# 使用滚动窗口计算每列的7天滚动均值,并更新数据
data = data.rolling(7).mean()# 使用Seaborn绘制折线图,展示数据中每列的变化趋势
sns.lineplot(data=data, palette="tab10", linewidth=2.5)

在这里插入图片描述

带观察值的水平箱线图

数据来源:https://github.com/mwaskom/seaborn-data/blob/master/planets.csv

# 导入所需的库
import seaborn as sns  
import matplotlib.pyplot as plt# 设置seaborn的主题样式为'ticks'
sns.set_theme(style="ticks")  # 初始化图表,大小为(7,6),并设置x轴为对数刻度
f, ax = plt.subplots(figsize=(7, 6))
ax.set_xscale("log")# 载入seaborn内置的'planets'数据集
planets = pd.read_csv(r"planets.csv")# 使用箱形图绘制'distance'为x轴,'method'为y轴
# 设置whis可显示异常值的范围,width调整箱形的宽度
# 使用'vlag'色阶
sns.boxplot(x="distance", y="method", data=planets, whis=[0, 100], width=.6, palette="vlag")# 使用散点图绘制'distance'为x轴,'method'为y轴  
# 设置点的大小,颜色和线宽
sns.stripplot(x="distance", y="method", data=planets,size=4, color=".3", linewidth=0)# 数据可视化美化
# 显示x轴网格线,移除y轴标签,裁剪左边边框 
ax.xaxis.grid(True)
ax.set(ylabel="") 
sns.despine(trim=True, left=True)# 显示图表
plt.show()

在这里插入图片描述

多个面上的线图

import seaborn as sns # 设置seaborn主题样式为'ticks'
sns.set_theme(style="ticks")  # 加载'sdots'示例数据集
dots = sns.load_dataset("dots")# 定义调色板的具体颜色值  
palette = sns.color_palette("rocket_r") # 绘制两面多个线图
# x轴为'time',y轴为'firing_rate'
# hue表示颜色区分的变量'coherence' 
# size表示点的大小代表的变量'choice'
# col表示按'slign'分面  
# kind指定折线图类型
# size_order设置点的大小顺序
# palette定义上面指定的调色板
# height/aspect设置图形大小,facet_kws定义分面参数
sns.relplot(data=dots, x="time", y="firing_rate",hue="coherence", size="choice", col="align",kind="line", size_order=["T1", "T2"], palette=palette,height=5, aspect=.75, facet_kws=dict(sharex=False))# 该图的作用是:
# 使用线图展示'dots'数据集中
# 'time','firing_rate'两个变量的关系
# 并利用颜色、点大小、分面等视觉编码显示不同的第三维和第四维信息
# 直观呈现多维数据集的关系

在这里插入图片描述

具有多种语义的散点图

import seaborn as sns 
import matplotlib.pyplot as plt# 设置seaborn主题样式为白色网格
sns.set_theme(style="whitegrid") # 加载内置的钻石数据集
diamonds = sns.load_dataset("diamonds")# 初始化图像和子图,并移除子图边框
f, ax = plt.subplots(figsize=(6.5, 6.5))
sns.despine(f, left=True, bottom=True)# 定义钻石clarity的排序
clarity_ranking = ["I1", "SI2", "SI1", "VS2", "VS1", "VVS2", "VVS1", "IF"]  # 绘制散点图
# x轴为carat,y轴为price
# hue为clarity,即颜色区分clarity
# size为depth,即点的大小代表depth
# palette定义颜色渐变 
# hue_order指定上面定义的clarity顺序
# sizes设置点的大小范围
# data和ax指定所用的数据及子图
sns.scatterplot(x="carat", y="price", hue="clarity", size="depth",palette="ch:r=-.2,d=.3_r",hue_order=clarity_ranking,sizes=(1, 8), linewidth=0,data=diamonds, ax=ax)# 这是一个组合了多个变量的散点图
# 既展示了carat与price的关系
# 又通过颜色和大小编码呈现了clarity和depth维度的信息
# 可以更清晰地呈现钻石数据集的多维分布情况

在这里插入图片描述

问题解决方案

解决seaborn绘图无法显示中文等问题

plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决无法显示符号的问题
sns.set(font='SimHei', font_scale=0.8)        # 解决Seaborn中文显示问题

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

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

相关文章

Python web实战之Django用户认证详解

关键词: Python Web 开发、Django、用户认证、实战案例 概要 今天来探讨一下 Django 的用户认证吧!在这篇文章中,我将为大家带来一些有关 Django 用户认证的最佳实践。 1. Django 用户认证 在开发 Web 应用程序时,用户认证是一个…

【ARM64 常见汇编指令学习 13 -- ARM 汇编 ORG 伪指令学习】

文章目录 ARM ORG 指令介绍UEFI 中对 ORG 指令的使用 ARM ORG 指令介绍 在ARM汇编中,"org"是一个汇编器伪指令,用于设置下一条指令的装入地址。"org"后面跟着的是一个表达式,这个表达式的值就是下一条指令的装入地址。如…

记录--基于css3写出的流光登录(注释超详细!)

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 完整效果 对基本的表单样式进行设置 这里设置了基本的表单样式,外层用了div进行包裹,重点是运用了两个i元素在后期通过css样式勾画出一条线没在聚焦文本框的时候线会过度成一个…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报2

天气(自然现象) 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象,即某瞬时内大气中各种气象要素(如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

MongoDB 6.0.8 安装配置

一、前言 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 将数据存储为一个文档,数据结构由键值(key>value…

阿里云“通义千问”开源,可免费商用

我是卢松松,点点上面的头像,欢迎关注我哦! 阿里云成为国内首个加入大模型开源行列的大型科技企业。就在昨天,阿里云公开表态,把自家的通义千问大模型开源。 阿里云把通用70亿参数模型,包括Qwen-7B和对话模…

《Web安全基础》03. SQL 注入

web 1:简要 SQL 注入2:MySQL 注入2.1:信息获取2.2:跨库攻击2.3:文件读写2.4:常见防护 3:注入方法3.1:类型方法明确3.2:盲注3.3:编码3.4:二次注入3…

如何打造属于自己的个人IP?

在当今信息爆炸的时代,个人 IP 已经成为人们在网络世界中的独特标签。无论是在职场上、创业中,还是在社交生活中,拥有个人 IP 的人都能脱颖而出,吸引更多的关注和机会。那么,如何打造属于自己的个人 IP 呢?…

阿里云率先荣获容器集群稳定性先进级认证

7 月 25 日,由中国信通院发起的“2023 稳保体系”评估结果在可信云大会现场公布,阿里云容器服务 ACK 成为首批通过“云服务稳定运行能力-容器集群稳定性”评估的产品,并荣获“先进级”认证。 云原生技术正在激活应用构建新范式,构…

2023数字生态大会召开,长虹佳华再获3项大奖

近日,2023数字生态大会在北京隆重召开。长虹佳华勇夺“2023数字生态云计算服务卓越企业”、“2023数字生态元宇宙十强”和“数字生态增值分销商十强”三项大奖;还同时入选 “智慧教育十佳案例” 和 “智能制造十佳案例”。 长虹佳华是国企控股的香港上市…

FFmpeg解码详细流程

介绍 FFmpeg的 libavcodec 模块完成音视频多媒体的编解码模块。老版本的 FFmpeg 将avcodec_decode_video2()作为视频的解码函数 API,将avcodec_decode_audio4()作为音频的解码函数 API;从 3.4版本开始已经将二者标记为废弃过时 API(attribut…

iTOP-RK3588开发板Ubuntu 系统交叉编译 Qt 工程-命令行交叉编译

使用源码 rk3588_linux/buildroot/output/rockchip_rk3588/host/bin/qmake 交叉编译 QT 工程。 最后烧写编译好的 buildroot 镜像,将编译好的 QT 工程可执行程序在 buildroot 系统上运行。 交叉编译 QT 工程如下所示,首先进入 QLed 的工程目录下。 然后…

【FAQ】EasyGBS平台通道显示在线,视频无法播放并报错400的排查

EasyGBS是基于国标GB28181协议的视频云服务平台,它可以支持国标协议的设备接入,在视频能力上能实现直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台级联等功能,既能作为业务平台使用,也能作为能力层平台调用。 我…

CS 144 Lab Four -- the TCP connection

CS 144 Lab Four -- the TCP connection TCPConnection 简述TCP 状态图代码实现完整流程追踪 测试 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab Four 对应的PDF: Lab Checkpoint 4: down the stack (the network interface) TCPConnection 简述 TCPConnection 需要…

aardio:用 WebView 模仿 mdict 界面

aardio:用 WebView 模仿 mdict 界面 import win.ui; /*DSG{{*/ mainForm win.form(text"aardio2";right889;bottom467) mainForm.add( button{cls"button";text"go";left335;top22;right399;bottom41;z2}; button2{cls"button…

SpringBoot使用redis作为缓存的实例

目录 什么是缓存? 缓存的作用? 缓存的成本? 实际项目中的应用 代码展示 什么是缓存? 缓存就是数据交换的缓冲区(称作Cache [ kʃ ] ),是存贮数据的临时地方,一般读写性能较高。 缓…

HTML+CSS+JavaScript:两种方法实现商品价格筛选效果

一、需求 鼠标点击上方菜单栏中不同的价格区间&#xff0c;自动筛选出价格符合条件的商品&#xff0c;并渲染在页面中 二、代码素材 以下是缺失JS部分的代码&#xff0c;感兴趣的小伙伴可以先自己试着写一写 <!DOCTYPE html> <html lang"en"><head…

【绪论0】

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.0 引言No.1 操作系统的概念功能和定义一、操作系统的概念和定义1、电脑的演变 二、操作系统的功能和目标 No.2 操作系统的特征一、并发二、共享三、虚拟四、异步 No.3 操作系统的发展与分类一、手工操作阶段二、批处理阶段…

Kubernetes高可用集群二进制部署(四)部署kubectl和kube-controller-manager、kube-scheduler

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…

《吐血整理》高级系列教程-吃透Fiddler抓包教程(21)-如何使用Fiddler生成Jmeter脚本-上篇

1.简介 我们知道Jmeter本身可以录制脚本&#xff0c;也可以通过BadBoy&#xff0c;BlazeMeter等工具进行录制&#xff0c;其实Fiddler也可以录制Jmter脚本&#xff08;而且有些页面&#xff0c;由于安全设置等原因&#xff0c;使用Jmeter直接无法打开录制时&#xff0c;这时就…