前言
导师要求学会画图,今天学习数据可视化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推荐网址
示例:
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。该情况如何解决尚不清楚。
后面继续研究,解决这个问题。