数据可视化

设置绘图可以在jupyter notebook显示

# 设置在notebook中直接展示图形输出
%matplotlib inline  
# 设置图片清晰度
%config InlineBackend.figure_format = 'retina'  

可以使用下面三种方法绘图

  1. 直接使用DataFrame绘图,比如 iris.plot() iris是个DataFrame数据,dataframe的绘图也是基于matplotlib
  2. 导入import matplotlib.pyplot as pltmatplotlib作图工具包
  3. seaborn 数据可视化包

常见的绘图有:

  • 条形图
  • 绘制多图
  • 饼图
  • 散点图
  • 直方图

matplotlib是什么

matplotlib是Python编程语言的一个绘图库,与Python深度集成,风格与Matlab接近

绘图基础

绘图一般使用 matplotlib包中的pyplot
因此 通常我们这么导入

import matplotlib.pyplot as plt

设置在notebook中直接展示图形输出

设置清晰度
%matplotlib inline  
# 设置图片清晰度
%config InlineBackend.figure_format = 'retina'  

plt.plot()是常用的绘图函数
plt.show()显示绘图

# 设置横坐标x的取值范围
x = np.arange(0, 5, 0.1);
# 根据x的值,通过sin()函数,获取y的值
y = np.sin(x)
# 使用matplotlib中的plot绘图函数
plt.plot(x, y)  
# 添加标题、x轴和y轴的名称
plt.title("sine function") # 标题
plt.xlabel("x value") # x坐标
plt.ylabel("y value") # y坐标
# 显示图像
plt.show()

我们可以控制图形的每一个细节
"b"代表blue,指定蓝色,"-"指定线的种类
linewidth指定线的粗细

plt.plot(x, y, "b-", linewidth=2.0) 

使用marker参数给线加标记符号
plt.plot(x,y, color = "blue", marker = ".")
设定xy轴的区间
plt.axis([0, 5, -1.1, 1.1])
等价于plt.xlim(0,5) 加上 plt.ylim(-1.1, 1.1)
显示网格
plt.grid(True)
加上文字描述
plt.text(3.1, 0.3, 'sin functoin')

在同一个坐标系位置多个图
各个图使用逗号隔开
下面这个例子展示了,不同选项对图形产生的不同效果

t = np.arange(0., 5., 0.2)dzb
在[0,5]的区间上分别绘制了 y=x, y=x^2, 和y=x^3 
"r"表示red红色,“--”表示虚线,
“b”表示blue蓝色,“s”表示square正方形,
“g”表示green绿色,“^”表示三角形
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')

穿插DataFrame方法

sort_values排序方法,by参数指定根据哪个属性排序
top10 = df.groupby('name')['ext price'].agg(['sum', 'count']).reset_index().sort_values(by='sum', ascending=False)[:10]
rename方法,可以对变量重新命名 inplace = True表示对源数据进行修改
top10.rename(columns={'name': 'Name', 'sum': 'Sales', 'count': 'Purchases'}, inplace=True)

绘制条形图plt.bar

绘图风格设置

# 使用ggplot风格的作图
plt.style.use('ggplot')
# 使用available属性查看可用的风格
plt.style.available

绘制条形图的核心方法

plt.barh 绘制水平方向的条形图,
plt.bar绘制垂直方向的直方图
plt.barh(np.arange(10), top10.Sales, height=0.5)

使用 ticks修改坐标的刻度 将数字改为有意义的字符串

plt.yticks(np.arange(10), top10.Name)
plt.xticks([0, 20000, 40000, 60000, 80000, 100000, 120000, 140000], 
           ['$0k', '$20k', '$40k', '$60k', '$80k', '$100k', '$120k', '$140k'])

绘制多图fig.add_subplot

在同一幅图中,分别绘制图,不共用坐标系。

  1. 设置画布大小plt.figure(figsize= 并返回画布对象
    fig = plt.figure(figsize=(12,5))
  2. 给画图加上标题, fontsize=14 字体大小, fontweight='bold' 加粗
    fig.suptitle('Sales Analysis', fontsize=14, fontweight='bold')
  3. 添加第一个子图fig.add_subplot() 其中121表示 1行2列第一个图
    ax1 = fig.add_subplot(121) #会返回这个子图
    添加之后 默认后续操作都是在子图上进行的
plt.barh(np.arange(10), top10.Sales, height=0.5, tick_label=top10.Name)
plt.title('Revenue')
# 加入平均销售额,用一条垂直的虚线表示
revenue_average = top10.Sales.mean()
plt.axvline(x=revenue_average, color='b', linestyle='--', linewidth=1)

axvline 绘制垂直线 参数x表示在x轴上的位置,

  1. 添加第二个图
ax2 = fig.add_subplot(122) #表示1行2列第二个图
plt.barh(np.arange(10), top10.Purchases, height=0.5)
plt.title('Units')
# 不显示y轴刻度
plt.yticks(visible=False)

# 加入平均交易个数,用一条垂直的虚线表示
purchases_average = top10.Purchases.mean()
plt.axvline(x=purchases_average, color='b', linestyle='--', linewidth=1)

plt.show()

饼图plt.pie

不需要xy轴,绘制的数据,标签名,autopct自动显示百分比

# pie绘制饼图,labels设置每个区域的标签名,autopct 显示所占比例
plt.pie(top10.Sales, labels=top10.Name, autopct='%1.1f%%')
# 调整轴的比例
plt.axis('equal')
plt.show()

散点图plt.scatter

scatter 绘制散点图,x,y设置x轴和y轴对应的数据,s设置点的大小
plt.scatter(x=top10.Purchases, y=top10.Sales, s=50)

直方图plt.hist

hist绘制直方图,bins设置区间个数 rwidth表示每个条的宽度 默认为1
plt.hist(df['ext price'], bins=20, rwidth=0.9)

设置x轴区间范围

plt.xlim(-200, 5000)

Python数据可视化模块—Seaborn

  • Seaborn是基于matplotlib产生的一个模块,专攻于统计可视化
  • 可以和pandas进行无缝链接,初学者使用Seaborn更容易上手
  • Seaborn和matplotlib的关系类似于pandas和numpy的关系。
# 导入seaborn包, 简写成sns
import seaborn as sn

使用sns作图

sns通用绘图

sns.FacetGrid().map()
facetGrid对应的是数据,map将前面的数据映射成图表。 这是比较通用的做法。
使用seaborn做图, 用品种划分数据
FacetGrid对象是用来连接pandas DataFrame到一个有着特别结构的matplotlib图像
具体来说,FacetGrid是用来画一组固定的关系给定某个变量的某个值
FacetGrid中的hue参数指明划分数据的变量,这里是species(品种)

sns.FacetGrid(iris, hue="species", size=8) \
   .map(plt.scatter, "petal_length", "petal_width").add_legend()

sns绘制直方图

col='Survived'指定将图片在一行中做出生还和罹难与年龄的关系图

sns.FacetGrid(titanic_df, col='Survived').
map(plt.hist, 'Age', bins=20, normed=True)

sns绘制箱图

sns.boxplot()
sns.boxplot(data=iris, x="species", y="sepal_width")

sns各个变量之间的关系图

sns.pairplot()
sns.pairplot(iris, hue="species")

sns绘制条形图

sns.barplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)

其中ci=None表示不显示置信区间

绘制折线图:使用sns.pointplot

sns.pointplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 提升你的洞察的最好方法之一是通过可视化你的数据:这样,你可以更容易地识别模式,掌握到困难的概念以及注意到关键的要素...
    段书勇阅读 38,046评论 1 37
  • [链接] 01. matplotlib API入门 02. Pandas中的绘图函数 03. 绘制地图:图形化显示...
    进步小小青年阅读 2,906评论 0 2
  • 第十五章 生成数据 matplotlib数学绘图库 pygal专注生成适合在数字设备上显示的图表 15.1 绘制折...
    Shinichi新一君阅读 1,018评论 0 0
  • 重点,主次分明。 正五行为先为重。喝形为后。 正五行为主,先通过。喝形为辅。 风水取舍主次。 无非注重于,水吉,山...
    东风蛰阅读 265评论 0 0
  • 昨天几个疯女人心血来潮,大半夜的跑去唱歌。 好久没有发泄发泄了,六个女的在大包房里不顾一切的轮流嘶吼。 一首离歌,...
    蔡清荷阅读 275评论 0 0