首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Python的pandas中从数据帧制作matplotlib散点图

在Python的pandas中从数据帧制作matplotlib散点图
EN

Stack Overflow用户
提问于 2013-01-13 02:38:30
回答 3查看 139.5K关注 0票数 86

在Python语言中使用pandas数据帧中的matplotlib绘制一系列散点图的最佳方法是什么?

例如,如果我有一个数据帧df,其中包含一些感兴趣的列,我发现自己通常会将所有内容转换为数组:

代码语言:javascript
运行
AI代码解释
复制
import matplotlib.pylab as plt
# df is a DataFrame: fetch col1 and col2 
# and drop na rows if any of the columns are NA
mydata = df[["col1", "col2"]].dropna(how="any")
# Now plot with matplotlib
vals = mydata.values
plt.scatter(vals[:, 0], vals[:, 1])

在绘图之前将所有内容转换为数组的问题是,它会迫使您中断数据帧。

考虑以下两个用例,在这些用例中,拥有完整的数据帧对于绘图至关重要:

  1. 例如,如果您现在想要查看col3的所有值,以获得您在调用scatter时绘制的相应值,并根据该值对每个点(或大小)进行着色,该怎么办?您必须返回,取出col1,col2的非na值,并检查它们的相应值。

有没有一种方法可以在保存数据帧的同时进行绘图?例如:

mydata = df.dropna(how="any",subset=" col1 "," col2 ") #绘制col1 by col2的散点,大小根据col3散布(mydata(“col1”,"col2") ),假设您想要根据某些列的值对每个点进行不同的过滤或着色。例如,如果您想要在col1, col2上自动绘制满足特定截止点的点的标签(标签存储在df的另一列中),或者对这些点进行不同的着色,就像人们在R中处理数据帧一样。例如:

mydata = df.dropna(how="any",subset="col1"," col2 ") myscatter = scatter(mydata["col1","col2"],s=1) #用红色绘制,尺寸较小,所有col2值大于0.5的点myscatter.replot(mydata"col2“> 0.5,color=" red ",s=0.5)

如何做到这一点?

编辑回复给crewbum:

您说最好的方法是分别绘制每个条件(如subset_asubset_b)。如果你有很多条件,比如你想把散点分成4种类型的点,甚至更多,用不同的形状/颜色绘制每个点该怎么办?如何优雅地应用条件a、b、c等,并确保将“其余部分”(不在这些条件中的内容)绘制为最后一步?

类似地,在您的示例中,您根据col3绘制不同的col1,col2,如果有NA值打破了col1,col2,col3之间的关联,该怎么办?例如,如果您希望根据其col3值绘制所有col2值,但某些行在col1col3中具有安娜值,则强制您首先使用dropna。所以你会这样做:

代码语言:javascript
运行
AI代码解释
复制
mydata = df.dropna(how="any", subset=["col1", "col2", "col3")

然后,您可以像您所展示的那样使用mydata绘制--使用col3的值绘制col1,col2之间的散点。但是mydata会遗漏一些点,这些点具有col1,col2的值,但对于col3来说是NA,这些点仍然需要绘制...那么,基本上如何绘制数据的“其余部分”,即不在过滤集合mydata中的点

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-13 18:48:58

尝试将DataFrame的列直接传递给matplotlib,如下面的示例所示,而不是将它们提取为numpy数组。

代码语言:javascript
运行
AI代码解释
复制
df = pd.DataFrame(np.random.randn(10,2), columns=['col1','col2'])
df['col3'] = np.arange(len(df))**2 * 100 + 100

In [5]: df
Out[5]: 
       col1      col2  col3
0 -1.000075 -0.759910   100
1  0.510382  0.972615   200
2  1.872067 -0.731010   500
3  0.131612  1.075142  1000
4  1.497820  0.237024  1700

根据另一列改变散点大小

代码语言:javascript
运行
AI代码解释
复制
plt.scatter(df.col1, df.col2, s=df.col3)
# OR (with pandas 0.13 and up)
df.plot(kind='scatter', x='col1', y='col2', s=df.col3)

根据另一列改变散射点颜色

代码语言:javascript
运行
AI代码解释
复制
colors = np.where(df.col3 > 300, 'r', 'k')
plt.scatter(df.col1, df.col2, s=120, c=colors)
# OR (with pandas 0.13 and up)
df.plot(kind='scatter', x='col1', y='col2', s=120, c=colors)

带有图例的散点图

但是,我发现创建带有图例的散点图的最简单方法是为每个点类型调用一次plt.scatter

代码语言:javascript
运行
AI代码解释
复制
cond = df.col3 > 300
subset_a = df[cond].dropna()
subset_b = df[~cond].dropna()
plt.scatter(subset_a.col1, subset_a.col2, s=120, c='b', label='col3 > 300')
plt.scatter(subset_b.col1, subset_b.col2, s=60, c='r', label='col3 <= 300') 
plt.legend()

更新

据我所知,matplotlib只是跳过具有NA x/y坐标或NA样式设置(例如,颜色/大小)的点。要查找由于NA而跳过的点,请尝试使用isnull方法:df[df.col3.isnull()]

要将一组点拆分为多个类型,请看一下numpy select,它是一个矢量化的if-then-else实现,并接受一个可选的默认值。例如:

代码语言:javascript
运行
AI代码解释
复制
df['subset'] = np.select([df.col3 < 150, df.col3 < 400, df.col3 < 600],
                         [0, 1, 2], -1)
for color, label in zip('bgrm', [0, 1, 2, -1]):
    subset = df[df.subset == label]
    plt.scatter(subset.col1, subset.col2, s=120, c=color, label=str(label))
plt.legend()

票数 119
EN

Stack Overflow用户

发布于 2017-10-15 10:28:44

Garrett的回答很棒,没有什么可补充的,但熊猫也有一个scatter method。使用它,它就像

代码语言:javascript
运行
AI代码解释
复制
df = pd.DataFrame(np.random.randn(10,2), columns=['col1','col2'])
df['col3'] = np.arange(len(df))**2 * 100 + 100
df.plot.scatter('col1', 'col2', df['col3'])

票数 7
EN

Stack Overflow用户

发布于 2019-06-23 10:55:37

我建议使用另一种方法,使用seaborn,这是一种功能更强大的数据绘图工具。您可以使用seaborn scatterplot并将第3列定义为huesize

工作代码:

代码语言:javascript
运行
AI代码解释
复制
import pandas as pd
import seaborn as sns
import numpy as np

#creating sample data 
sample_data={'col_name_1':np.random.rand(20),
      'col_name_2': np.random.rand(20),'col_name_3': np.arange(20)*100}
df= pd.DataFrame(sample_data)
sns.scatterplot(x="col_name_1", y="col_name_2", data=df, hue="col_name_3",size="col_name_3")

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14300137

复制
相关文章
MySQL | 如何对查询结果集进行排序
数据操作语言:结果集排序 如果没有设置,查询语句不会对结果集进行排序。也就是说,如果想让结果集按照某种顺序排列,就必须使用 ORDER BY 子句。 SELECT ...... FROM ...... ORDER BY 列名 [ASC | DESC]; SELECT ename,sal FROM t_emp ORDER BY sal; SELECT empno,ename,sal,deptno FROM t_emp ORDER BY sal DESC; 排序关键字 ASC 代表升序(默认),DESC
Zkeq
2022/05/18
6.3K0
MySQL | 如何对查询结果集进行排序
窥探Stack Overflow & Stack Exchange 的基础架构
Stack Overflow 对于广大的程序员来说应该并不陌生,当我们google一些开发相关问题时,被导航到Stack Overflow
点火三周
2022/07/10
1.9K1
窥探Stack Overflow & Stack Exchange 的基础架构
如何在 Core Data 中对 NSManagedObject 进行深拷贝
对 NSMangedObject 进行深拷贝的含义是为一个 NSManagedObject(托管对象)创建一个可控的副本,副本中包含该托管对象所有关系层级中涉及的所有数据。
东坡肘子
2022/07/28
1.5K0
如何在 Core Data 中对 NSManagedObject 进行深拷贝
【画图】如何对clusterProfiler富集结果进行筛选并画图?
Y叔神包(clusterProfiler)[1],用起来是真的很舒服。注释基因功能,看看有啥通路全靠他。做好富集以后,一个简单的代码,整体的结果即刻展现。比如下面这个图,
Chris生命科学小站
2023/02/28
8020
【画图】如何对clusterProfiler富集结果进行筛选并画图?
闲聊 modern data stack
2021 年一个有趣的新变化就是:Building the modern stack with open-source data solutions,换成比较容易理解的话,就是基于开源软件构建自己的数据处理流程。如果是在国内玩大数据的人,可能对此还有些不太理解(比如我),现在各家互联网公司基于 Hadoop 生态圈等一系列开源组件构建的大数据平台解决方案早就已经成熟,那modern data stack价值在哪呢?通过对What I Learned From The Open Source Data Stack Conference 2021的阅读,我发现这是为了解决传统企业的数字化转型问题的,让这些企业也能使用上方便高效的处理工具洞察数据,而不用局限于某一家提供闭源的商业解决方案的公司。用文中的话来说,就是通过开源软件,企业可以自己掌控数据,保证用户数据隐私安全,而不用担心数据被第三方公司利用。
哒呵呵
2021/12/24
1.3K0
掌握 Core Data Stack
或许觉得比较枯燥,亦或许感觉 Xcode 提供的模版已经满足了使用的需要,很多 Core Data 的使用者并不愿意在 Core Data Stack 的了解和掌握上花费太多的精力。这不仅限制了他们充分使用 Core Data 提供的丰富功能,同时也让开发者在面对异常错误时无所适从。本文将对 Core Data Stack 的功能、组成、配置等做以说明,并结合个人的使用经验聊一下如何设计一个符合当下需求的 Core Data Stack。本文并不会展示一个完整的创建代码,更多是原理、思路和经验的阐述。
东坡肘子
2022/07/28
8720
掌握 Core Data Stack
使用Spring Data JPA进行数据分页与排序
如果一次性加载成千上万的列表数据,在网页上显示将十分的耗时,用户体验不好。所以处理较大数据查询结果展现的时候,分页查询是必不可少的。分页查询必然伴随着一定的排序规则,否则分页数据的状态很难控制,导致用户可能在不同的页看到同一条数据。那么,本文的主要内容就是给大家介绍一下,如何使用Spring Data JPA进行分页与排序。
字母哥博客
2020/09/23
4K0
使用Spring Data JPA进行数据分页与排序
Modern Data Stack 下 Data Integration 生态(下)
上一篇介绍了什么是 modern data stack,这一篇继续来梳理下,在modern data stack 下面常见的产品都有哪些。
大数据和云计算技术
2021/12/30
9890
Modern Data Stack 下 Data Integration 生态(下)
Modern Data Stack 下 Data Integration 生态(上)
业界流行 modern data stack 的说法,本质上就是将传统的一些工具用 SaaS 化的思路在云上重新再做一遍,从来显著提升客户的使用难度。modern data stack 几大核心是:cloud 、open-source 、SaaS business models。
大数据和云计算技术
2021/12/28
9790
Modern Data Stack 下 Data Integration 生态(上)
SAS DDE(Dynamic data exchange ) output Excel
DDE输出也是我最近get到的新技能,由于之前一直Tagsets输出Excel发现Tagsets输出有一些弊端,在数据量非常大的时候运行时间长,而且文件也会被放大。最近恰巧从朋友那儿看到了DDE输出相关的程序,然后就开始学习研究,目前也是一直半解,如有不当之处还望指正。
Setup
2019/10/21
1.9K0
基于TSUNG对MQTT进行压力测试-测试结果
https://www.cnblogs.com/lingyejun/p/7898873.html
翎野君
2023/05/12
4340
基于TSUNG对MQTT进行压力测试-测试结果
两个线程对变量i进行加1操作,结果如何?
梳理博客,写到关于两个线程对变量i进行加1操作,结果如何?为什么?如何解决?首先分析问题,多线程环境对共享变量发生修改,经典的线程安全问题,通过解决问题的思路拓展。
疯狂的KK
2020/06/18
1.8K0
Modern data stack的前世今生
古老的大数据技术孕育了云计算,从云计算中衍生出了SaaS、PaaS等云服务,而云服务又让大数据技术在新时代获得了新生。
哒呵呵
2022/06/08
9500
Data Structures (三) - 栈Stack实现
栈也是线性表的一种,但是与其他线性表不同的是,栈分为栈顶和栈底且只允许从栈顶进行操作,即入栈(push)或者出栈(pop)操作,所以栈的操作遵循后进先出的原则(Last In First Out)
RiemannHypothesis
2022/08/19
2640
Data Structures (三) - 栈Stack实现
在 Hibernate Search 5.5 中对搜索结果进行排序
“秩序,秩序”- 有时不仅仅下议院尊敬的议员需要被喊着让排序,而且在特殊情况下 Hibernate 的查询结果也需要排序。
知忆
2021/06/08
2.9K0
如何对列表进行搜索
logic [31:0] ram_block[1024] = '{default:0}
Lauren的FPGA
2019/10/30
2.8K0
kernel|network| Linux Networking Stack: Sending Data
This blog post explains how computers running the Linux kernel send packets, as well as how to monitor and tune each component of the networking stack as packets flow from user programs to network hardware.
heidsoft
2022/04/18
2K0
kernel|network| Linux Networking Stack: Sending Data
点击加载更多

相似问题

SEDE中的结果计数与Stack Exchange的API不匹配

113

SQL:如何使用Stack Exchange Data Explorer检索用户发布的有帮助的答案数量?

18

使用Spring data JPA存储过程对结果进行分页

22

如何对ember data关系进行分页

323

如何对Stripe结果进行分页?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文