Matplotlib里有两种画散点图的方法,一种是用ax.plot画,一种是用ax.scatter画。

一. 用ax.plot画

ax.plot(x,y,marker="o",color="black")

二. 用ax.scatter画

ax.scatter(x,y,marker="o",s=sizes,c=colors)

ax.plot和ax.scatter的区别:

ax.plot:各散点彼此复制,因此整个数据集中所有的点只需配置一次颜色和大小。对大型数据集而言,ax.plot方法效率更高。

ax.scatter:灵活性高,可以单独控制每个散点,使其具有不同的属性(大小,填充颜色,边框颜色等)。

下面利用Nathan Yau所著的《鲜活的数据:数据可视化指南》一书中的数据,学习画图。

数据地址:http://datasets.flowingdata.com/flowingdata_subscribers.csv (用于散点图)

http://datasets.flowingdata.com/crimeRatesByState2005.csv(用于气泡图)

准备工作:先导入matplotlib和pandas,用pandas读取csv文件,然后创建一个图像和一个坐标轴

import pandas as pd
from matplotlib import pyplot as plt
subscriber=pd.read_csv(r"http://datasets.flowingdata.com/flowingdata_subscribers.csv")
fig,ax=plt.subplots()

让我们先看看第一个数据文件的前5行:

         Date  Subscribers  Reach  Item Views   Hits
0 01-01-2010 25047 4627 9682 27225
1 01-02-2010 25204 1676 5434 28042
2 01-03-2010 25491 1485 6318 29824
3 01-04-2010 26503 6290 17238 48911
4 01-05-2010 26654 6544 16224 45521

我们把文件中的订阅人数根据日期的推进画出来:

import pandas as pd
from matplotlib import pyplot as plt
subscriber=pd.read_csv(r"http://datasets.flowingdata.com/flowingdata_subscribers.csv")
fig,ax=plt.subplots() time=[pd.to_datetime(i) for i in subscriber["Date"]]
ax.plot(time,subscriber["Subscribers"],"o",color="blue")
ax.set(xlabel="Date",ylabel="Number of subsribers")
ax.set_title("Growth of subscribers --- Jan 2010")
ax.annotate("2 days where \nit went wrong",xy=(0.43,0.06),xycoords='axes fraction',\
xytext=(0.56,0.1),textcoords='axes fraction',\
arrowprops=dict(facecolor='black', shrink=0.05))
ax.annotate("",xy=(0.046,0.8),xycoords='axes fraction',\
xytext=(0.004,0.68),textcoords='axes fraction',\
arrowprops=dict(arrowstyle="-"))
ax.annotate("27611\n(+10%)",xy=(0.955,0.92),xycoords='axes fraction',\
xytext=(0.905,0.76),textcoords='axes fraction',\
arrowprops=dict(arrowstyle="-"))
ax.spines["left"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False) plt.show()

图像如下:

可以看到有两个点情况异常,由于原因未知,添加注释进行说明。

接下来看看第二个数据文件的前5行:

           state  murder  forcible_rape  robbery  aggravated_assault  \
0 United States 5.6 31.7 140.7 291.1
1 Alabama 8.2 34.3 141.4 247.8
2 Alaska 4.8 81.1 80.9 465.1
3 Arizona 7.5 33.8 144.4 327.4
4 Arkansas 6.7 42.9 91.1 386.8 burglary larceny_theft motor_vehicle_theft population
0 726.7 2286.3 416.7 295753151
1 953.8 2650.0 288.3 4545049
2 622.5 2599.1 391.0 669488
3 948.4 2965.2 924.4 5974834
4 1084.6 2711.2 262.1 2776221

这是美国各州各种犯罪行为的发生率(每10万人口)。

让我们看看各州谋杀率和入室盗窃率之间是否有关联,同时把各州的人口也显示出来,看看人口多的州是否这两种犯罪率同时也高。

首先把第一行United States的平均数据去除,然后把population,state,murder,burglary这几项数据分别拣出。在scatter命令中,以murder为x轴,burglary为y轴,s(气泡面积)按population调整,alpha为透明度。其中有一个州的谋杀率特别高,因此把x轴的上下限调整一下,以便更好地看出谋杀率和入室盗窃率之间的关系。这样,一个三维图像就画了出来。

import pandas as pd
from matplotlib import pyplot as plt
crime=pd.read_csv(r"http://datasets.flowingdata.com/crimeRatesByState2005.csv")
fig,ax=plt.subplots(figsize=(10,5)) crime=crime[1:]
population=crime["population"].values
state=crime["state"].values
murder=crime["murder"].values
burglary=crime["burglary"].values ax.scatter(murder,burglary,s=population/40000,alpha=0.6)
ax.set(xlim=(0,11),ylim=(200,1300),\
xlabel="Murder per 100,000 population",\
ylabel="Burglary per 100,000 population",\
title="Murder & Burglary in USA")
for i,j,z in zip(murder,burglary,state):
ax.text(x=i-0.3,y=j-0.1,s=z,fontsize=7)
ax.spines["top"].set_visible(False)
ax.spines["left"].set_visible(False)
ax.spines["right"].set_visible(False) plt.show()

图像如下:

可以看出谋杀率和入室盗窃率之间是呈正比关系的,但是人口多的州并非这两种犯罪率就高。

此外,可以通过设置scatter命令中的c(颜色)参数,进而来展示四维图像。

Matplotlib学习---用matplotlib画散点图,气泡图(scatter plot, bubble chart)的更多相关文章

  1. Matplotlib学习---用matplotlib画箱线图(boxplot)

    箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分 ...

  2. Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)

    直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://d ...

  3. Matplotlib学习---用matplotlib和sklearn画拟合线(line of best fit)

    在机器学习中,经常要用scikit-learn里面的线性回归模型来对数据进行拟合,进而找到数据的规律,从而达到预测的目的.用图像展示数据及其拟合线可以非常直观地看出拟合线与数据的匹配程度,同时也可用于 ...

  4. matplotlib 知识点13:绘制散点图(scatter函数精讲)

    散点图是指在回归分析中,数据点在直角坐标系平面上的分布图,散点图表示因变量随自变量而变化的大致趋势,据此可以选择合适的函数对数据点进行拟合. 用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间 ...

  5. Matplotlib学习---用seaborn画联合分布图(joint plot)

    有时我们不仅需要查看单个变量的分布,同时也需要查看变量之间的联系,这时就需要用到联合分布图. 这里利用Jake Vanderplas所著的<Python数据科学手册>一书中的数据,学习画图 ...

  6. Matplotlib学习---用matplotlib画误差线(errorbar)

    误差线用于显示数据的不确定程度,误差一般使用标准差(Standard Deviation)或标准误差(Standard Error). 标准差(SD):是方差的算术平方根.如果是总体标准差,那么用σ表 ...

  7. Matplotlib学习---用matplotlib画阶梯图(step plot)

    这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/us-postage.c ...

  8. Matplotlib学习---用matplotlib画面积图(area chart)

    这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://book.flowingdata.com/ch05/data/us-pop ...

  9. Matplotlib学习---用matplotlib画热图(heatmap)

    这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/ppg2008.csv ...

随机推荐

  1. Jmeter(三十五)_分布式

    jmeter分布式简单步骤说明: 1:添加远程服务器IP到配置文件 在JMETER_HOME / bin / jmeter.properties中,找到名为“ remote_hosts ” 的属性,并 ...

  2. [Linux]Debian 9重启DNS重置问题

    先编辑/etc/resolv.conf, 添加一个DNS, 比如114.114.114.114 然后sudo apt-get install resolvconf 然后编辑/etc/resolvcon ...

  3. Python学习第十二篇——切片的使用

    Python中使用函数切片可以创建副本,保留原本.现在给出如下代码 magicians_list = ['mole','jack','lucy'] new_lists = [] def make_gr ...

  4. c#中用sql存储过程

    string connstr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionStri ...

  5. vscode中php断点调试方法!

    一.PHP的代码断点调试 1.打开vscode的首选项设置,添加"php.validate.executablePath": "D:\\newXampp\\php\\ph ...

  6. mysql数据库和JDBC学习

    数据库概念: 数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. ---------数据库服务器,mysql(管理) 数据库服务器---->N多库-- ...

  7. tortoisegit密钥与git密钥配置

    在客户端生成密钥并将公钥上传到服务器可以避免每次连接git服务器都要登录的尴尬. 但git的私钥是不能直接用在tortoisegit上的,需要用tortoisegit的puttygen转换一下,详细过 ...

  8. MongoDB之修改器

    MongoDB之修改器 $set  简单粗暴  {name: valuel} 直接将key对应的值赋值给value. db.xxoo.insert({}, {set: {key: value}}) / ...

  9. 【学习总结】C-翁恺老师-入门-第0周<程序设计与C>

    [学习总结]C-翁恺老师-入门-总 1-首先按视频说的下载编辑器 <DevC++> 并一路默认设置: 安装包下载链接 (我有vc6.0不过预感告诉我老师要用类似CS50里那种命令行编辑器? ...

  10. 移动端和PC端页面常用的弹出层

    我们在页面的时候,很多时候用到了弹出层,消息提醒,确认框等等,统一样式的弹出框可以使页面更加优美.在此,我整理一下我们项目的移动端和PC端页面常用的弹出层. 一.移动端 我们需在页面引入弹出框的样式和 ...