【自学】python初学 LESSON 4 <数据可视化——生成数据>


前言

导师要求学会画图,今天学习数据可视化1——生成数据。


一、折线图

调用函数subplots()

示例:

import matplotlib.pyplot as plt

squares = [1, 4, 9, 16, 25, 36]
fig, history = plt.subplots()

history.plot(squares)
plt.show()

 注意:

(1)fig. 表示整张图片,删除之后会报错。具体作用还不是很清楚。

(2)x = plt.subplots()表示调用该函数, x.plot(squares)表明函数的变量名是x,所需的数据是squares矩阵中的。plot. show()输入后才能显示图片。

1. 修改标签文字和线条粗细

import matplotlib.pyplot as plt

#想要在图片中显示中文一定要有这两行
from pylab import *
mpl.rcParams['font.sans-serif']=['SimHei']


squares = [1, 4, 9, 16, 25, 36]
fig, x = plt.subplots()

#设置线条粗细
x.plot(squares, linewidth = 2)

#设置轴标题
x.set_title(r'平方', fontsize = 24) #r表示是宋体
x.set_xlabel('值', fontsize = 24)

#设置刻度标记
x.tick_params(axis = 'both', labelsize = 14)

# 坐标轴的刻度设置向内(in)或向外(out)
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

plt.show()

一定要注意图片中能否显示中文的问题。但是库里面中文的字体种类有限,如何添加新的字体还没有研究清楚。

输出:

 

2. 矫正图形

由于上面形成曲线的方法是只有y轴,系统会对曲线进行拟合,x轴从0开始计算。此时得到的曲线并非是想要的二次函数曲线。因此在输入时,应同时输入x轴和y轴的数据。

示例:

import matplotlib.pyplot as plt

#想要在图片中显示中文一定要有这两行
from pylab import *
mpl.rcParams['font.sans-serif']=['SimHei']

#同时提供x和对应的y作为生成图片的输入,会使输出的曲线是精确的,而非系统自动拟合而成
input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]
fig, x = plt.subplots()

#设置线条粗细
x.plot(input_values, squares, linewidth = 2)

#设置轴标题
x.set_title(r'平方', fontsize = 24) #r表示是宋体
x.set_xlabel('值', fontsize = 24)

#设置刻度标记
x.tick_params(axis = 'both', labelsize = 14)

# 坐标轴的刻度设置向内(in)或向外(out)
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

plt.show()

结果:

 

注意:

x轴的输入数组名称(input_values)和y轴的输出数组名称(squares)一定不能和所调用函数的变量名x重复,否则会报错。因此建议x轴数组命名为xlabel_data

3. 设置内置样式

 设置seaborn样式

示例:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

#同时提供x和对应的y作为生成图片的输入,会使输出的曲线是精确的,而非系统自动拟合而成
input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]

#设置样式
sns.set(palette="muted", color_codes=True)    # seaborn样式

#一些配置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决无法显示符号的问题
sns.set(font='SimHei', font_scale=0.8)        # 解决Seaborn中文显示问题

fig, x = plt.subplots()

#设置线条粗细
x.plot(input_values, squares, linewidth = 2)

#设置轴标题
x.set_title('seaborn', fontsize = 24)
x.set_xlabel('值', fontsize = 24)

#设置刻度标记
x.tick_params(axis = 'both', labelsize = 14)

# 坐标轴的刻度设置向内(in)或向外(out)
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

plt.show()

注意:如果直接用plt.style.use('seaborn')导入样式的话,就无法显示中文字符。因此需要对代码进行修改。

结果:

 看看其他的样式:

代码:

import pandas as pd
import matplotlib.pyplot as plt

#同时提供x和对应的y作为生成图片的输入,会使输出的曲线是精确的,而非系统自动拟合而成
input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]

'''
#设置样式
bmh.set(palette="muted", color_codes=True)    # seaborn样式

#一些配置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决无法显示符号的问题
bmh.set(font='SimHei', font_scale=0.8)        # 解决Seaborn中文显示问题
'''
plt.style.use('classic')
fig, x = plt.subplots()

#设置线条粗细
x.plot(input_values, squares, linewidth = 2)

#设置轴标题
x.set_title('classic', fontsize = 24)
'''
x.set_xlabel('值', fontsize = 24)
'''

#设置刻度标记
x.tick_params(axis = 'both', labelsize = 14)

# 坐标轴的刻度设置向内(in)或向外(out)
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

plt.show()

                  

                  

 感觉还是seaborn好看

4. 绘制散点图

 示例:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

fig, x = plt.subplots()
x.scatter(2,4, s = 200) 
#与画曲线不同之处,画曲线是x.plot(input_values, squares, linewidth = 2)
#s = 200是对所画点大小的设置

#设置样式
sns.set(palette="muted", color_codes=True)    # seaborn样式

#一些配置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决无法显示符号的问题
sns.set(font='SimHei', font_scale=0.8)        # 解决Seaborn中文显示问题


#设置表格标题
x.set_title('平方数', fontsize = 24)
x.set_xlabel('值', fontsize = 14)
x.set_ylabel('平方', fontsize = 14)

plt.show()

 结果:

注意:

(1)仍然需要显示中文的那一套代码

(2)与画折线不同的仅在x.scatter(2,4, s = 200) ,画曲线是x.plot(input_values, squares, linewidth = 2) 

若要绘制一系列的点:

只需要将画单点的输入换成x坐标和y坐标的矩阵。

示例:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

x_values = [1, 3, 6, 7, 10]
y_values = [10, 13, 6, 8, 2]

fig, x = plt.subplots()
x.scatter(x_values, y_values, s = 200) 
#与画曲线不同之处,画曲线是x.plot(input_values, squares, linewidth = 2)
#s = 200是对所画点大小的设置

#设置样式
sns.set(palette="muted", color_codes=True)    # seaborn样式

#一些配置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决无法显示符号的问题
sns.set(font='SimHei', font_scale=0.8)        # 解决Seaborn中文显示问题


#设置表格标题
x.set_title('平方数', fontsize = 24)
x.set_xlabel('值', fontsize = 14)
x.set_ylabel('平方', fontsize = 14)

plt.show()

结果:

 5. 自动计算数据

包括使用一些公式计算,设置每个坐标轴的取值范围

示例:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

#自动生成并计算数据
x_values = range(1, 101)
y_values = [x**3 for x in x_values]

fig, x = plt.subplots()
x.scatter(x_values, y_values, s = 20) 
#与画曲线不同之处,画曲线是x.plot(input_values, squares, linewidth = 2)
#s = 200是对所画点大小的设置

#设置样式
sns.set(palette="muted", color_codes=True)    # seaborn样式

#一些配置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决无法显示符号的问题
sns.set(font='SimHei', font_scale=0.8)        # 解决Seaborn中文显示问题

#设置表格标题
x.set_title('平方数', fontsize = 24)
x.set_xlabel('值', fontsize = 14)
x.set_ylabel('平方', fontsize = 14)

#设置每个坐标轴的取值范围
x.axis([0, 101, 0, 1000000])

plt.show()

结果:

 注意:

(1)方法x.axis()要求提供4个值:x轴的最小、最大值,y轴的最小、最大值

6. 自定义颜色和映射效果

自定义颜色:

x.scatter(x_values, y_values, c = (0, 0.8, 0), s = 20) 

其中c为RGB颜色模式。画图的RGB推荐网址

(1条消息) 学术文章绘图常用颜色搭配(附RGB值)_EnthuseIceberg的博客-CSDN博客_科研配色rgb

示例:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

#自动生成并计算数据
x_values = range(1, 101)
y_values = [x**3 for x in x_values]

fig, x = plt.subplots()
x.scatter(x_values, y_values, c = (0.4, 0.71, 0.92), s = 20) 
#与画曲线不同之处,画曲线是x.plot(input_values, squares, linewidth = 2)
#s = 200是对所画点大小的设置

#设置样式
sns.set(palette="muted", color_codes=True)    # seaborn样式

#一些配置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决无法显示符号的问题
sns.set(font='SimHei', font_scale=0.8)        # 解决Seaborn中文显示问题

#设置表格标题
x.set_title('平方数', fontsize = 24)
x.set_xlabel('值', fontsize = 14)
x.set_ylabel('平方', fontsize = 14)

#设置每个坐标轴的取值范围
x.axis([0, 101, 0, 1000000])

plt.show()

结果:

注意:

c中的三个值分别代表红色、绿色和蓝色。值越接近0,颜色越深;越接近1,颜色越浅。

 疑问:

此处的c的值只能取(0,1),但是RGB的值均大于1。该情况如何解决尚不清楚。

颜色映射:

颜色映射是一系列颜色,从其实颜色渐变到结束颜色。在可视化中,颜色映射用于突出数据的规律。一般而言,较浅的颜色表示数值较小。

x.scatter(x_values, y_values, c = y_values, cmap = plt.cm.Blues, s = 20) 

示例:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

#自动生成并计算数据
x_values = range(1, 101)
y_values = [x**3 for x in x_values]

fig, x = plt.subplots()
x.scatter(x_values, y_values, c = y_values, cmap = plt.cm.Blues, s = 20) 
#与画曲线不同之处,画曲线是x.plot(input_values, squares, linewidth = 2)
#s = 200是对所画点大小的设置

#设置样式
sns.set(palette="muted", color_codes=True)    # seaborn样式

#一些配置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决无法显示符号的问题
sns.set(font='SimHei', font_scale=0.8)        # 解决Seaborn中文显示问题

#设置表格标题
x.set_title('平方数', fontsize = 24)
x.set_xlabel('值', fontsize = 14)
x.set_ylabel('平方', fontsize = 14)

#设置每个坐标轴的取值范围
x.axis([0, 101, 0, 1000000])

plt.show()

结果:

 

也可换为其他色系:

x.scatter(x_values, y_values, c = y_values, cmap = plt.cm.Reds, s = 20)  红色

 

二、练习

代码:

没有按照题目上的函数画,自由发挥了一下。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import math

#自动生成并计算数据
x_values = range(-10, 21)
y_values = [x**2 - 4*x + 5 for x in x_values]

fig, x = plt.subplots(1)
x.scatter(x_values, y_values, s = 100) 

#设置表格标题
x.set_title('f(x)', fontsize = 24)
x.set_xlabel('x', fontsize = 14)
x.set_ylabel('y', fontsize = 14)

#设置每个坐标轴的取值范围
x.axis([-10, 20, 0, 100])

plt.show()

 结果:


总结

有一些没有解决的问题。

(1)如何添加新的字体还没有研究清楚。

(2)改变颜色的c的值只能取(0,1),但是RGB的值均大于1。该情况如何解决尚不清楚。

后面继续研究,解决这个问题。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rachel MuZy

你的鼓励是我的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值