收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

Python数据分析:折线图和散点图的绘制

[复制链接]
1 H& Z4 j. p( a( P& b

原创:宋宋 Python专栏

7 E& R% {; [; L' o2 p9 M. G

来源:Python数据分析:折线图和散点图的绘制

* p% d/ E- _" ^3 [

折线图

4 ]9 T6 R% `9 L# e& X$ P

折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。

) _ I+ A l- B+ K$ e6 M% _

Matplotlib 中绘制散点图的函数为 plot() ,使用语法如下:

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

1) 简单的折线图

9 ^ Y$ L8 Z7 b7 e7 m, R7 h1 U, A. c

在matplotlib面向对象的绘图库中,pyplot是一个方便的接口。

( |0 R8 |5 C& P) h6 X

plot()函数:支持创建单条折线的折线图,也支持创建包含多条折线的复式折线图----只要在调用plot()时传入多个分别代表X轴和Y轴数据的list列表即可。

+ @; i+ z Q& ]; ?- Y0 q
import matplotlib.pyplot as plt9 W/ q* V/ m2 O6 E$ G5 x8 a8 i: { z' z1 d4 g) y4 B x_data = [2011,2012,2013,2014,2015,2016,2017] : z6 w7 @) ]: b" t y_data = [58000,60200,63000,71000,84000,90500,107000]+ I/ J- c* S- b5 m( N$ i 0 W# _: A) P/ I% W( j+ k plt.plot(x_data,y_data)- v- R1 P9 [. P. r3 r& o9 ~ plt.show() $ s C1 f- D5 U! C% q" A7 D
& D' T6 | U, A6 _( t2 L: n
3 h) ]7 i/ q, p! i( l3 {9 g

2)复式折线图:

$ H3 o& B. q) j4 G
import matplotlib.pyplot as plt( I. v# Y' o$ |, e0 `' }4 G x_data = [2011,2012,2013,2014,2015,2016,2017]( H- u% t4 h* B' {+ X+ z y_data = [58000,60200,63000,71000,84000,90500,107000]1 j, I/ b0 K/ C$ y; A0 H y_data2 = [52000,54200,51500,58300,56800,59500,62700]5 K( }% _, x7 O- f! Y: G" B " A& L% h! T! V' i, [8 s+ a: m plt.plot(x_data,y_data,color=red,linewidth=2.0,linestyle=--) " l+ N% k6 _$ o) C7 T plt.plot(x_data,y_data2,color=blue,linewidth=3.0,linestyle=-.)* T& f0 {3 K3 ^4 l plt.show()+ p- O2 i: {. Y9 C0 x5 S2 w
. U" |9 [* d8 K( r5 t& H b
* d9 J) Q6 D, c, W: u: L" ^

注:说明:参数color=’ red ‘,可以换成color=’ #054E9F’,每两个十六进制数分别代表R、G、B分量,除了使用red、blue、green等还可以参照下图小白参数linestyle可以选择使用下面的样式:

- solid line style 表示实线-- dashed line style 表示虚线-. dash-dot line style 表示短线、点相间的虚线: dotted line style 表示点线

参数 linewidth 可以指定折线的宽度参数 marker 是指标记点,有如下的:

`# t/ z* F. }9 L
% b$ {& H- g8 F$ C8 d/ C0 b

3) 管理图例 对于复式折线图,应该为每条折线添加图例,可以通过legend()函数来实现。该函数可传入两个list参数,其中第一个list参数(handles参数)用于引用折线图上的每条折线;第二个list参数(labels)代表为每条折线所添加的图例

8 R7 e* M0 q* ?" S, h0 O+ {' v
import pandas as pd2 ?# {7 E A- E6 G( X import matplotlib.pyplot as plt % p, h# @2 |' \: M* F C+ w8 N( ?. {& E% w; C" d2 p) e- Z7 c #读取数据+ M5 c# M+ A4 u* H- @ data = pd.read_excel(matplotlib.xlsx)$ [' U: m& T& F$ {2 t ' b! Z! F7 ]1 `8 ~& R plt.figure(figsize=(10,5))#设置画布的尺寸 2 c9 `. e- k0 R7 c) D plt.title(Examples of line chart,fontsize=20)#标题,并设定字号大小 ) ?- [8 h# t9 D- O5 O plt.xlabel(ux-year,fontsize=14)#设置x轴,并设定字号大小 $ I; m1 t2 l8 j3 @* z plt.ylabel(uy-income,fontsize=14)#设置y轴,并设定字号大小& Z4 r) G- H. t! N $ p, V: \. @% @0 u5 E8 g2 G; _ #color:颜色,linewidth:线宽,linestyle:线条类型,label:图例,marker:数据点的类型 2 H) D. O8 }) O! V' e in1, = plt.plot(data[时间],data[收入_Jay],color="deeppink",linewidth=2,linestyle=:, marker=o) & {: c( l* q! y3 D in2, = plt.plot(data[时间],data[收入_JJ],color="darkblue",linewidth=1,linestyle=--, marker=+) ; M, y3 O+ v; f in3, = plt.plot(data[时间],data[收入_Jolin],color="goldenrod",linewidth=1.5,linestyle=-, marker=*) 6 |" G& ]( q) o6 i3 `. |1 r5 o$ |2 |: A# V8 N7 Q plt.legend(handles = [in1,in2,in3],labels=[Jay income,JJ income,Jolon income],loc=2)#图例展示位置,数字代表第几象限' p% |, E1 g9 X! ` plt.show()#显示图像 0 p8 y* l. `+ p- H$ }& S- t
) |2 A7 W6 J, c
! {; Z0 p# W. K9 ?, n( M

4) 管理多个子图

0 V( b, u- G/ n; m! f8 C
import matplotlib.pyplot as plt * x: q3 n& G) h' J4 W# f6 _/ I import numpy as np " P- s$ r0 M) t4 S' l, R4 k) i import matplotlib.gridspec as gridspec, `0 ~' o, n5 S* M0 y import matplotlib.font_manager as fm #字体管理器 - V" ]8 ?' a9 ?( A+ b9 Q! Q8 a. h. _; G my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc") . \4 k2 U6 w* C) c7 \ ( x* l" }" @- I" p- R1 j1 v plt.figure() * L/ i/ i; p" h+ n t 9 Q4 ?5 j) o5 A1 E& q3 p x_data = np.linspace(-np.pi,np.pi,64,endpoint=True) 6 X9 O3 f$ d# }2 ^1 T gs = gridspec.GridSpec(2,3) #将绘图区分成两行三列 . e4 M# y* a$ `2 `4 h ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行 w& v! K9 J0 ~6 o0 {% z ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二个参数为0) 5 S, m) @7 d2 ] ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二个参数为1:3)4 w; q0 E1 B6 T! j 8 W3 p( k/ u6 J) T* [/ k #绘制正弦曲线 4 a$ v2 @; c; s ax1.plot(x_data,np.sin(x_data)) # L2 g7 T" o3 E0 g+ t ax1.spines[right].set_color(none)) ^4 H( \+ _" F: \' K6 j0 ? ax1.spines[top].set_color(none) 6 X# z+ r6 f) Y0 g9 r( ]2 ^ ax1.spines[bottom].set_position((data,0))" o' P5 m( \' R& x& Z1 D ax1.spines[left].set_position((data,0)) # c8 D) e- B6 c* f8 b6 J! m9 _ ax1.set_title(正弦曲线,fontproperties=my_font)$ f9 t' P1 Q. b+ O4 e+ T! h * |! \8 O/ z5 i- _# ^ #绘制余弦曲线 ( E$ m$ ~2 q3 z1 G' c; w ax2.plot(x_data,np.cos(x_data)) ! B' Q, T" ]# c9 s o) s ax2.spines[right].set_color(none)& X- e( Z- l% F; n ax2.spines[top].set_color(none) 6 x: w7 R3 [! q7 m! b# _& w ax2.spines[bottom].set_position((data,0)) , Y; m6 S; s4 A8 a' S- Z1 z ax2.spines[left].set_position((data,0))% x/ [) r. D% b( o8 R g3 b" e: ` ax2.set_title(余弦曲线,fontproperties=my_font) ( ~& m! Q3 {6 a" V& C9 N% g2 s$ B& x 0 g7 I$ d" A9 f" ^: O% y/ l #绘制正切曲线5 g- f3 F- E# s& K4 I' k ax3.plot(x_data,np.tan(x_data))& p3 n0 _1 H ~" t* h Q% P ax3.spines[right].set_color(none) # D. ~2 e& e) I% n) ]3 V ax3.spines[top].set_color(none)0 R; _( o. p# W$ n* t9 ] ax3.spines[bottom].set_position((data,0))* M) f. U, }" t/ W5 s6 u- [ M ax3.spines[left].set_position((data,0)) v8 K0 w/ P A4 [' l ax3.set_title(正切曲线,fontproperties=my_font) 5 n$ [ `2 k" ~ plt.show()& v; ~* j, J9 ]* R; F
) c8 x; o0 `3 k- E/ i

结果:

$ ~. k/ z7 S D, {6 L
% m' S: F0 j4 ]0 F" w) y, I! w4 p
7 q" ?! ^! g3 j+ P# o: | 9 r- m. B, M5 j$ M+ h 5 q- ]0 w7 T. T8 A7 d. \ ! o! f4 J' M! K5 r ? t! E4 o5 s1 U
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
伪丶笑
活跃在2026-4-15
快速回复 返回顶部 返回列表