python 数据处理之Matplotlib可视化

本文是关于Python的Matplotlib库的数据可视化学习笔记,涵盖了基本用法、设置坐标轴、图例、标注、散点图、柱状图、等高线图、3D绘图等内容,并提供了在Linux环境中的实践案例。
摘要由CSDN通过智能技术生成

声明:仅作自学笔记之效用,是亦可作共享之功用。

经济学分析多用stata(再一般大抵为stataSE),图像处理在数学建模中则多用Matlab,虽然已经下载了Matlab,但是既然python已经有matlab的包,那不如先了解一二,也方便与其他包相适用。此时尚且大一大二而已,自然多有稚嫩。
自学基本内容框架主要来自莫烦python,朋友们也可以直接看他的相关视频。
我就相当于做了个文字稿以及一些自己的思考。

安装准备

我是win10和linux都用了的
win10安装如果是直接charm环境安装可能会报错之类,我是换成了conda环境的。然后提前安装了一个visual studio.

Linux总体比较顺畅,开始出不了图,不过马上解决了,见【基本用法】的第一个例子说明 那部分我提到了解决方案。
我是ubuntu20.04
具体安装看相关教程咯~
我linux上python版本不是最新的,是3.8,无伤大雅~

基本用法(在linux跑的)

我们用numpy做点数据,生成从-1到1五十个点。
x = np.linspace(-1,1,50)

import matplotlib
import matplotlib.pyplot as plt
plt.switch_backend('TkAgg')
import numpy as np

x = np.linspace(-1,1,50)
y = x*2 + 1

plt.plot(x,y)
plt.show()

可能会报错,不要慌,在一个最小化安装的linux里面,我是这么解决的:

在import matplotlib之后输入
matplotlib.use(‘TkAgg’)
然后在终端输入sudo apt-get install python3-tk
问题解决。
不过其实你在终端下载了那个之后,一般就不需要输入matplotlib.use('TkAgg')

在这里插入图片描述

一定要加plt.show()否则不能出图

生成多张图(在linux跑的)

plt.figure()
一个如此指令管理一张图,最后总的只需要一句plt.show()生成图像就行。

import matplotlib
import matplotlib.pyplot as plt

import numpy as np

x = np.linspace(-1,1,50)
y1 = x*2 + 1
y2 = x**2


plt.figure()
plt.plot(x,y1)

plt.figure()
plt.plot(x,y2)

plt.show()

在这里插入图片描述在这里插入图片描述

当然你还可以在指令里面决定figure的序号以及长宽
在这里插入图片描述只需要

plt.figure(num=10,figsize=(8,5))
plt.plot(x,y1)

plt.figure(num=13,figsize=(10,3))
plt.plot(x,y2)

多条线在一张图以及线效果变化(在linux跑的)

基本储备

color='(输入颜色)',其中color可以缩写成c
颜色有哪些?

color参数
k:black
b:blue
g:green
r:red
c:cyan(青色)
m:megenta(品红)
y:yellow
w:white

完整版本

在这里插入图片描述

线风格与点标记
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
装了seaborn扩展的话,在字典seaborn.xkcd_rgb中包含所有的xkcd crowdsourced color names。不过没必要这么多。
以上参考 https://blog.csdn.net/syyyy712/article/details/87426927

例子来了

import matplotlib
import matplotlib.pyplot as plt

import numpy as np

x = np.linspace(-1,1,50)
y1 = x*2 + 1
y2 = x**2

plt.figure()
plt.plot(x,y2)
plt.plot(x,y1,color='indianred',linewidth=2.0,linestyle='-.')

plt.show()

so we can see a ‘colourful’ figure.
在这里插入图片描述

设置坐标轴

设置坐标轴的取值范围

plt.xlim()
plt.ylim()

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1,1,50)
y1 = x*2 + 1
y2 = x**2

plt.figure()
plt.plot(x,y2)
plt.plot(x,y1,color='indianred',linewidth=2.0,linestyle='-.')

plt.xlim(-2,2)
plt.ylim(-2,10)

plt.show()

在这里插入图片描述

坐标轴标签

plt.xlabel()

plt.xlabel('I am y')
plt.ylabel('I am x')

别设置成中文标签,显示不了

坐标轴单位长度

plt.xticks()
注意,新的长度范围最好要大于等于原来你设定的x轴的取值范围

如果新的长度小于原来范围,那么 就如下所示

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1,1,50)
y1 = x*2 + 1
y2 = x**2

plt.figure()
plt.plot(x,y2)
plt.plot(x,y1,color='indianred',linewidth=2.0,linestyle='-.')

plt.xlim(-2,2)
plt.ylim(-2,10)
plt.xlabel('I am y')
plt.ylabel('I am x')
plt.xticks(np.linspace(0,2,5))

plt.show()

注意plt.xticks(np.linspace(0,2,5))
在这里插入图片描述

你看,0之前部分没单位点了。

如果新的范围更大呢?

坐标范围随之变大

plt.xticks(np.linspace(-10,2,5))

在这里插入图片描述

如果是想为某点处设置文字呢?

plt.xticks()的另一个用法

plt.yticks([-2,3,5,9,10],
           [r'$who$',r'$is$',r'$the$',r'$best$',r'$boy$']
           )

第二行可以直接 [‘who’,‘is’,‘the’,‘best’,‘boy’] 但是这样的字体是正方体的比较僵硬,正则表达r'$ $'的话把字体变成了斜体.

不过注意一下,正则表达不能辨认空格,因此空格要写成\就是斜杠加一个空格

同样,转置符也可以转符号 比如 \alpha

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1,1,50)
y1 = x*2 + 1
y2 = x**2

plt.figure()
plt.plot(x,y2)
plt.plot(x,y1,color='indianred',linewidth=2.0,linestyle='-.')

plt.xlim(-1,2)
plt.ylim(-2,10)
plt.xlabel('I am x')
plt.ylabel('I am y')
plt.xticks(np.linspace(-1,2,5))
plt.yticks([-2,3,5,9,10],
           [r'$who\ can\ read\ \alpha$',r'$is$',r'$the$',r'$best$',r'$boy$']
           )

plt.show()

在这里插入图片描述

移动坐标轴

gca=get current axis
指令plt.gca()就是选取了坐标轴

spins是脊梁,也就是坐标那个框的四个框框
你记着上面那个图,对比下面这个

ax = plt.gca()
ax.spines['right'].set_color('indianred')
ax.spines['top'].set_color('red')
ax.spines['left'].set_color('dodgerblue')
ax.spines['bottom'].set_color('darkcyan')

在这里插入图片描述

先设置坐标轴用别的轴代替,我们用脊梁代替,然后移动脊梁,妙哉
xaxis.set_ticks_position()
ax.spines['bottom'].set_position(('data',+20))
注意,这个移动bottom是上下移动,不然你移动横轴左右移动 移动个寂寞?然后注意是(('data',+-20))其中+20就是上移20

注意一下移动问题


import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

x = np.linspace(-1,10,50)
y = x**2

plt.plot(x,y,color='indianred',linewidth=2.0,linestyle='-.')

plt.xlabel('I am x')
plt.ylabel('I am y')


ax = plt.gca()
ax.spines['right'].set_color('indianred')
ax.spines['top'].set_color('red')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',+20))
ax.spines['left'].set_position(('data',+3))

plt.show()

在这里插入图片描述

除了data来辅助移动,还有outward,axes
其中axes是定位到百分之多少。这个配合ylim()使用效果更加

制作图例legend

plt.plot()里面加label=()
然后再
plt.legend()
比如

plt.plot(x,y1,linestyle=':',color='olive',marker='<',label='shuai')
plt.plot(x,y2,linestyle='-',color='firebrick',marker='1',label='too shuai')
plt.legend()

当然你还可以决定legend的位置
其中如果loc='best'意味着它自动帮你选择一个最合适的位置(一般是空白的位置)放legend.
自己决定就是upper right,upper left,center right,center left,lower right,lower left

如果要传入handles 注意必须要把前面的线段命名为name,的形式
注意一下加和不加handles的效果

不加 就自动按照上下顺序命名

import matplotlib.pyplot as plt
import numpy as np
import math

x = np.linspace(-3, 3, 50)
y1 = x**6 + x**3 + x**2 - 1
y2 =  5*x**3 + 6*math.e**x + 1

plt.figure()
# set x limits


l1, = plt.plot(x,y1,linestyle=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王梓淳

随心打赏充当俺零花钱哈哈哈哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值