百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

如何使用 Pandas Plot 生成常见类型的图表?

bigegpt 2024-08-14 14:51 2 浏览

欢迎来到雲闪世界当 Pandas 足以进行数据可视化时,您不需要 Matplotlib一行代码即可绘制数据,让常规 EDA 工作更加轻松。

使用 Matplotlib、Seaborn 和 Plotly 等数据可视化库非常常见。然而, 在日常的临时 EDA 分析中,我发现我们可能不必使用这些库。事实上,Pandas 库本身可能足以胜任这些工作。

在本文中,我将介绍如何使用 Pandas Plot 生成常见类型的图表,而无需 Matplotlib。实际上,Pandas Plot 在后台使用了 Matplotlib 对象。然而,方便之处在于,我们可以使用一行代码非常轻松地从数据框中绘图。

当然,如果只使用 Pandas Plot,会有很多限制。所以我建议只在足够的情况下使用它。在最后一节中,我还将给出一些 Pandas Plot 无法帮助的场景。希望本文对您有所帮助。

1. 样本数据集

编辑

通常,我的文章都是从安装库开始的。但是,对于 Pandas,我们可以跳过它,因为它太常见了。此外,在大多数环境中,例如 Google Colab 或 Databricks,环境中已经有 Pandas 库。

让我们创建一个示例数据集,可用于本教程中的演示目的。

为了方便起见,我们可以使用 Numpy 来生成随机数。请注意,在实际的数据可视化用例中,我们甚至不需要 Numpy。

import pandas as pd
import numpy as np

# If you want to reproduce exactly the same results
np.random.seed(123)

# Generate sample data
data = {
    'Date': pd.date_range(start='1/1/2024', periods=100),
    'Product_A_Sales': np.random.randint(50, 200, 100),
    'Product_B_Sales': np.random.randint(30, 150, 100),
    'Temperature': np.round(np.random.normal(25, 5, 100), 2),
    'City': np.random.choice(['Sydney', 'Melbourne', 'Adelaide', 'Brisbane', 'Perth'], 100),
    'Revenue': np.random.randint(500, 1000, 100),
    'Profit': np.random.randint(50, 200, 100)
}

df = pd.DataFrame(data)

# Show sample
df.head()

seed(123)是可选的。但是,如果您想尝试本文中的所有示例并期望获得相同的结果,请使用相同的种子数。因此,我们将生成的随机数将是相同的。

编辑

因此,我们的数据集是一个模拟宽表,其中包含日期、产品销售统计数据和温度等其他特征。

2. 使用 Pandas 进行绘图及技巧

编辑

所有数据可视化教程都从折线图开始,因为它们是最基本的类型。让我们看看如何仅使用 Pandas 创建折线图。

假设我们想绘制产品 A 随时间变化的销售趋势。这很简单,如下所示。

df.plot(kind='line', x='Date', y='Product_A_Sales', title='Product A Sales Over Time');

编辑

当我们plot()从数据框调用该方法时,我们只需告诉它我们需要一个折线图kind='line',然后告诉它 x 轴和 y 轴是什么。没有太多例子。太简单了。

但是,你有没有注意到,输出结果很丑陋<Axes:...>?这是因为 Pandas 使用 Matplotlib 在后台生成图表。即使我们不必导入 Matplotlib 并调用它,该方法df.plot()仍然会生成Axes对象。这意味着,在 Jupyter Notebook 或类似 iPython 的环境中,如果我们不plt.show()从 Matplotlib 调用,输出结果将始终如此丑陋。

是真的吗?不完全是 :)

在 Jupyter Notebook 环境中,我们可以使用分号;来抑制单元格中对象的输出。例如,你一定知道我们可以直接输出对象值,如下所示。

编辑

但是,如果我们添加分号,对象就不会被输出。

编辑

类似地,我们也可以使用该技巧来抑制 Pandas 图的丑陋输出。

编辑

3.Pandas Plot 提供哪些功能?

编辑

除了上面演示的折线图之外,Pandas Plot 支持大多数常见的图表类型,如上图所示。我只会将代码和示例图表放在下面。

# 1-1 Grouped Bar Chart
df.groupby('City')[['Product_A_Sales', 'Product_B_Sales']].mean().plot(kind='bar', title='Average Sales by City', figsize=(10, 6));

# 1-2 Horizontal Bar Chart
df.groupby('City')['Revenue'].mean().plot(kind='barh', title='Average Revenue by City', figsize=(10, 6), color='skyblue');

# 2-1 Scatter Chart
df.plot(kind='scatter', x='Temperature', y='Product_A_Sales', title='Product A Sales vs Temperature', figsize=(10, 6));

# 2-2 Histogram
df['Temperature'].plot(kind='hist', bins=20, title='Temperature Distribution', figsize=(10, 6));

# 3-1 Stacked Area Chart
df[['Product_A_Sales', 'Product_B_Sales']].plot(kind='area', title='Product Sales Over Time', figsize=(10, 6), alpha=0.5);

# 3-2 Pie Chart
df['City'].value_counts().plot(kind='pie', title='Distribution by City', figsize=(8, 8), autopct='%1.1f%%', startangle=90);

您可能注意到我使用了 Matplotlib 的一些参数。同样,由于 Pandas Plot 在后台使用 Matplotlib,因此所有这些图表类型及其配置都与 Matplotlib 完全相同。

例如,figsize()可以帮助定义图形的大小,color可以帮助自定义颜色代码,并且autopct可以标准化饼图中百分比的小数。

Matplotlib 文档中提供了所有内容,因此我不会在本文中重复。

4. Pandas 在数据可视化方面的局限性

编辑

在正常的 EDA 活动中,我相信 Pandas Plot 函数足以应付大多数场景。但是,有些场景会达到它的极限。在以下情况下,我们可能必须使用 Matplotlib 或其他可视化库。

需要高级样式和格式

编辑

当我们需要更高级的样式和格式时,Pandas 图有时无法满足。假设我们想在图表中添加一些注释,例如在散点图中突出显示最高销售价值。

# Pandas Plot Scatter
df.plot(kind='scatter', x='Temperature', y='Product_A_Sales', title='Product A Sales vs Temperature');

# Matplotlib with Annotation
import matplotlib.pyplot as plt

ax = df.plot(kind='scatter', x='Temperature', y='Product_A_Sales', title='Product A Sales vs Temperature')
ax.annotate('Highest Sales', xy=(df['Temperature'].max(), df['Product_A_Sales'].max()), xytext=(30, 180),
            arrowprops=dict(facecolor='gold', shrink=0.05))
plt.show()

专业图表类型

编辑

图片由作者创建

当我们需要特殊类型的图表时,Pandas 图可能无法提供帮助,尽管它具有大多数常见类型。例如,Pandas 图可以生成箱线图来展示销售分布。然而,小提琴图可以更好地说明分布。后者可直接从 Seaborn 库中获得。

# Pandas Plot Box Plot
df.boxplot(column='Product_A_Sales', by='City', grid=False);

# Seaborn Violin Plot
import seaborn as sns
import matplotlib.pyplot as plt

sns.violinplot(x='City', y='Product_A_Sales', data=df)
plt.title('Violin Plot of Product A Sales by City')
plt.show()

交互性

编辑

Pandas 图表是静态的。这意味着,当我们希望可视化更具交互性时,我们必须寻找替代方案,例如鼠标悬停提示和平移手势。Plotly 是我最喜欢的用于生成交互式数据可视化的库之一。

import plotly.express as px

fig = px.scatter(df, x='Temperature', y='Product_A_Sales', title='Product A Sales vs Temperature', hover_data=['Date', 'City'])
fig.show()

结论

总而言之,很高兴知道 Pandas 可以非常轻松地在任何数据框中绘制我们的数据。因此,在大多数情况下,我们可能不需要使用其他库,包括 Matplotlib。这将使我们的日常 EDA 工作变得更加轻松,因为即使一行代码就足够了。当然,Pandas Plot 无法实现很多功能,本文也对此进行了详细说明。我希望这篇文章会对您有所帮助。

感谢关注雲闪世界。(亚马逊aws和谷歌GCP服务协助解决云计算及产业相关解决方案)

订阅频道(https://t.me/awsgoogvps_Host)
TG交流群(t.me/awsgoogvpsHost)


相关推荐

为3D手游打造, Visual Studio Unity扩展下载

IT之家(www.ithome.com):为3D手游打造,VisualStudioUnity扩展下载7月30日消息,微软正式发布升级版VisualStudioToolsforUnity扩...

由ArcMap属性字段自增引出字段计算器使用Python的技巧

1.前言前些日子有人问我ArcMap中要让某个字段的值实现自增有什么方法?我首先想到像SQLServer中对于数值型字段可以设置自增。所以我打开ArcCatalog查看发现只提供默认值,没办法只能看...

微软首次回答 HoloLens 相关问题,终于爆料了

fengo2015/04/2115:11注:本文作者张静是NVIDIAGPU架构师,微信公众号“黑客与画家”(HackerAndPainter),知乎专栏地址。欢迎各位童鞋与他交流探讨。...

C#指针的应用(c#指针类型)

C#在有限的范围内支持指针。C#的指针只不过是一个持有另一类型内存地址的变量。但是在C#中,指针只能被声明为持有值类型和数组的内存地址。与引用类型不同,指针类型不被默认的垃圾收集机制所跟踪。出于同...

C# 堆栈(Stack)(c# 堆栈中定位调用messagebox 的地方)

C#集合在C#中,堆栈(Stack)是一种后进先出(LIFO,LastInFirstOut)的数据结构。堆栈(Stack)适用于存储和按顺序处理数据,其中最新添加的元素会最先被移除。堆...

欢迎回来:Fortran意外重回流行编程语言20强榜单

TIOBE指数是用来确定一种编程语言受欢迎程度的指标之一。它并不表明哪种编程语言是最好的,也不表明哪种编程语言写的代码行数最多,而是利用在谷歌、维基百科、必应、亚马逊、YouTube等各种引擎和网站上...

C#+NET MAUI实现跨平台/终端(linux,win,ios等)解决方案

简介.NETMulti-platformAppUI(.NETMAUI)是一个跨平台的框架,用于使用C#和XAML创建移动和桌面应用程序。使用.NETMAUI,您可以用一套代码库开发可以在A...

C#代码安全红线:SQL注入防护终极方案,让你的系统固若金汤

在数字化时代,应用系统的安全性至关重要。而SQL注入攻击,长期盘踞在OWASP(OpenWebApplicationSecurityProject)漏洞榜单的前列,成为众多基于数据库的应用系统...

C# (一)状态机模式(状态机代码实现)

最近空闲,炒炒隔夜饭,以前这些模式在自己项目种应用过不少,但一直没有像别人那样写一个系列,最近年纪大了,很多东西都忘记了,特别AI的兴起,更少写代码了,反正没什么事情,自己在重写一遍吧。创建型模式(5...

C# 中 Predicate 详解(c#中的replace)

Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由Array和List类的几种方法使用,用于在集合中搜索元素。Predicate<T>...

C#中$的用法?(c#中&&什么意思)

文章来自AI问答。在C#中,$符号用于字符串插值(StringInterpolation)。字符串插值是C#6.0引入的一种特性,它允许你在字符串中直接嵌入表达式,而不需要使用string.For...

C#并行编程:Parallel类(c# 并行处理)

在Parallel类中提供了三个静态方法作为结构化并行的基本形式:Parallel.Invoke方法:并行执行一组委托。Parallel.For方法:执行与C#for循环等价的并行方法。Parall...

颠覆认知!用Span重构foreach循环竟让数据处理快如闪电

在C#编程的世界里,数据处理效率始终是开发者们关注的焦点。随着项目规模的扩大和数据量的激增,哪怕是细微的性能提升,都可能对整个应用的响应速度和用户体验产生深远影响。近年来,C#引入的Span<T...

Unity3D手游开发实践《腾讯桌球》客户端开发经验总结

本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身。虽然基于Unity3D,很多东西同样适用于Cocos。本文从以下10大点进行阐述:1.架构设计2.原生插件/平台交互3.版本与补丁4.用脚本,...

.NET 7 AOT 的使用以及 .NET 与 Go 互相调用

目录背景C#部分环境要求创建一个控制台项目体验AOT编译C#调用库函数减少体积C#导出函数C#调用C#生成的AOTGolang部分安装GCCGolang导出函数.NETC#...