Matplotlib学习---用matplotlib画散点图,气泡图(scatterplot, bubble chart)

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("25047",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(颜色)参数,进而来展示四维图像。

原文地址:https://www.cnblogs.com/HuZihu/p/9418789.html

时间: 2024-11-10 13:09:12

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

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

直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/crimeRatesByState2005.csv 以下是这个数据文件的前5行: state murder forcible_rape robbery aggravated_assault 0 United States 5.6 31.7 140.7 291.1

Matplotlib学习---用matplotlib画折线图(line chart)

这里利用Jake Vanderplas所著的<Python数据科学手册>一书中的数据,学习画图. 数据地址:https://raw.githubusercontent.com/jakevdp/data-CDCbirths/master/births.csv 准备工作:先导入matplotlib和pandas,用pandas读取csv文件,然后创建一个图像和一个坐标轴 import pandas as pd from matplotlib import pyplot as plt birth=p

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

这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://book.flowingdata.com/ch05/data/us-population-by-age.xls 准备工作:先导入matplotlib和pandas,用pandas读取excel文件,然后创建一个图像和一个坐标轴 import pandas as pd from matplotlib import pyplot as plt population=pd.read_ex

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

这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/ppg2008.csv 首先查看一下数据文件的前5行: Name G MIN PTS FGM FGA FGP FTM FTA FTP ... 0 Dwyane Wade 79 38.6 30.2 10.8 22.0 0.491 7.5 9.8 0.765 ... 1 LeBron James 81 37.7 28.4 9.7 19.

Matplotlib学习---用matplotlib画雷达图(radar chart)

雷达图常用于对多项指标的全面分析.例如:HR想要比较两个应聘者的综合素质,用雷达图分别画出来,就可以进行直观的比较. 用Matplotlib画雷达图需要使用极坐标体系,可点击此链接,查看对极坐标体系的介绍:https://www.cnblogs.com/kallan/p/6738577.html. 下面,我们从五个方面(编程能力,沟通技能,专业知识,团队协作,工具掌握)来对路人甲和路人乙进行比较. 代码如下: import numpy as np from matplotlib import p

Matplotlib学习---用wordcloud画词云(Word Cloud)

画词云首先需要安装wordcloud(生成词云)和jieba(中文分词). 先来说说wordcloud的安装吧,真是一波三折.首先用pip install wordcloud出现错误,说需要安装Visual C++ 14.0.折腾半天安装好Visual C++后,还是不行,按网上指点,下载第三方包安装(https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud).安装是成功了,可是在anaconda里导入的时候又出现了问题,说是"no module

Python:2D绘图库matplotlib学习总结

本文为学习笔记----总结!大部分为demo,一部分为学习中遇到的问题总结,包括怎么设置标签为中文等.matlab博大精深,需要用的时候再继续吧. Pyplot tutorial Demo地址为:点击打开链接 一个简单的例子: # -*- coding: utf-8 -*- import matplotlib.pyplot as plt plt.plot([1, 4, 9, 16]) plt.ylabel('some numbers') plt.show() 运行结果为: 我只指定了一组list

matplotlib学习之(四)设置线条颜色、形状

本文是学习<matplotlib for python developers>的一点笔记plot画图时可以设定线条参数.包括:颜色.线型.标记风格.1)控制颜色颜色之间的对应关系为b---blue   c---cyan  g---green    k----blackm---magenta r---red  w---white    y----yellow有三种表示颜色的方式:a:用全名  b:16进制如:#FF00FF  c:RGB或RGBA元组(1,0,1,1) d:灰度强度如:'0.7'

html5学习(一)--canvas画时钟

利用空余时间学习一下html5. 1 <!doctype html> 2 <html> 3 <head></head> 4 <body> 5 <canvas id="clock" width="500" height="500"></canvas> 6 <script> 7 var clock=document.getElementById('cloc