一、matplotlib的使用
二、数据可视化的意义
1. 提高理解和解释数据的能力
2. 发现数据中的模式和异常
3. 简化复杂数据的展示
4. 增强数据分析的说服力
5. 支持数据驱动的决策
6. 促进数据的探索和发现
7. 提高沟通效率
三、常用图表的定义和作用
1. 折线图(Line Chart)
定义:折线图使用折线连接一系列数据点,通常用于显示数据在一段时间内的变化趋势。
作用:适用于时间序列数据,能够显示数据的变化趋势和波动情况。例如,股票价格、温度变化等。
2. 柱状图(Bar Chart)
定义:柱状图使用矩形柱表示不同类别的数据,其高度或长度代表数据的值。
作用:适用于比较不同类别的数据大小。例如,销售额、人口数量等。
3. 饼图(Pie Chart)
定义:饼图将数据分成扇形区域,每个扇形的角度大小表示数据的比例。
作用:适用于显示部分与整体的关系,例如市场份额、预算分配等。
4. 散点图(Scatter Plot)
定义:散点图使用点在平面上表示两个变量的数据值,点的位置由变量的值决定。
作用:适用于显示两个变量之间的关系和分布情况。例如,身高与体重、价格与销量等。
5. 直方图(Histogram)
定义:直方图使用相邻的矩形柱表示数据的频率分布,其高度表示数据的频率。
作用:适用于显示数据的分布情况和频率。例如,考试成绩分布、年龄分布等。
6. 箱线图(Box Plot)
定义:箱线图通过箱形和须状线展示数据的分布特征,包括中位数、四分位数和异常值。
作用:适用于比较数据的分布特征和发现异常值。例如,收入分布、测量误差等。
7. 热图(Heatmap)
定义:热图使用颜色表示数据的值,不同的颜色代表不同的数值范围。
作用:适用于显示大量数据的分布情况和相关性。例如,相关矩阵、地理数据分布等。
8. 面积图(Area Chart)
定义:面积图通过填充折线图下方的区域表示数据的累积变化。
作用:适用于显示数据的累积变化和趋势。例如,累计销量、累积降水量等。
9. 雷达图(Radar Chart)
定义:雷达图使用多个轴表示不同的变量,数据点通过折线连接,形成多边形。
作用:适用于显示多变量的数据比较和特征。例如,性能评估、市场调研等。
10. 散布矩阵(Pair Plot)
定义:散布矩阵展示多个变量之间的散点图和直方图,以矩阵形式排列。
作用:适用于探索多个变量之间的关系和分布。例如,数据特征分析、模型输入变量分析等。
示例代码
import matplotlib.pyplot as plt
import numpy as np
# 数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
categories = ['A', 'B', 'C', 'D']
values = [15, 30, 45, 10]
data = np.random.randn(1000)
# 折线图
plt.figure(figsize=(10, 6))
plt.subplot(2, 3, 1)
plt.plot(x, y)
plt.title("Line Chart")
# 柱状图
plt.subplot(2, 3, 2)
plt.bar(categories, values)
plt.title("Bar Chart")
# 饼图
plt.subplot(2, 3, 3)
plt.pie(values, labels=categories, autopct='%1.1f%%')
plt.title("Pie Chart")
# 散点图
plt.subplot(2, 3, 4)
plt.scatter(x, y)
plt.title("Scatter Plot")
# 直方图
plt.subplot(2, 3, 5)
plt.hist(data, bins=20)
plt.title("Histogram")
# 热图(使用随机数据)
plt.subplot(2, 3, 6)
data = np.random.rand(10, 10)
plt.imshow(data, cmap='hot', interpolation='nearest')
plt.title("Heatmap")
plt.tight_layout()
plt.show()
四、绘制多折线、两组柱形的柱形图、饼图、圆环图
1、多折线
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
x = np.arange(4, 19)
y_max = np.array([32, 33, 34, 34, 33, 31, 30, 29, 30, 29, 26, 23, 21, 25, 31])
y_min = np.array([19, 19, 20, 22, 22, 21, 22, 16, 18, 18, 17, 14, 15, 16, 16])
# 绘制折线图
plt.grid(b=True, which='major', axis='both' )
plt.plot(x, y_max, color='purple', ls='--')
plt.plot(x, y_min, color='black', ls=':')
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.title("未来15天的最高气温和最低气温")
plt.show()
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.arange(6)
y1 = [174,93,284,21,43,74]#甲国家发电量
y2 = [88,283,97,34,75,46]#乙国家发电量
width = 0.3
labels=["水电","火电","核电","风电","太阳能","其他"]
plt.bar(x,y1,tick_label=labels,width=width, color='red')
plt.bar(x+width,y2,width=width, color='blue')
plt.show()
2、柱形图
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.arange(5)
y1 = [74,93,84,81,79]#甲成绩
y2 = [88,83,97,74,72]#乙成绩
width = 0.3
labels=["语文","数学","英语","物理","化学"]
plt.bar(x,y1,tick_label=labels,width=width, color='red')
plt.bar(x+width,y2,width=width, color='blue')
plt.show()
3、饼图
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# 饼图外侧的说明文字
kinds = [' 购物 ', ' 人情往来 ', ' 餐饮美食 ', ' 通信物流 ', ' 生活日用 ',' 交通出行 ', ' 休闲娱乐 ', ' 其他 ']
# 饼图的数据
money_scale = [800 / 3000, 100 / 3000, 1000 / 3000, 200 / 3000, 300 / 3000, 200 / 3000, 200 / 3000, 200 / 3000]
dev_position = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
# 绘制饼图
plt.pie(money_scale, labels=kinds, autopct='%3.1f%%', shadow=True,explode=dev_position, startangle=90)
plt.show()
4、圆环图
wedgeprops={'width': 0.8}
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = np.array([931,430,210,68,413,148,100,310])
pie_labels = np.array(["伙食","零食","学习","通讯","服饰","交通","娱乐","其他"])
plt.pie(data, radius=1.3, wedgeprops={'width': 0.75},
labels=pie_labels,colors=['red','green','blue','yellow'], autopct='%3.1f%%')
plt.title("6月消费情况")
plt.show()
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = np.array([542,334,189,2304,830,810,410])
pie_labels = np.array(["东北","华北","华东","华中","华南","西南","西北"])
plt.pie(data, radius=1.3, wedgeprops={'width': 0.8},
labels=pie_labels,colors=['red','green','blue','yellow'], autopct='%3.1f%%')
plt.title("2023级新生来源地区")
plt.show()
五、识别常用颜色:红、绿、蓝、黄、紫、青、黑、白
colors=['red','green','blue','yellow','purple','cyan','black','white']
六、设置线的样式,如实线、长虚线、短虚线、点划线等
plt.plot(x,y,color='purple',ls='--')
// : 代表短虚线
// -. 代表点划线
// -- 代表长虚线
// - 代表实线
七、设置网格线
plt.grid(b=Ture, which='major', axis='both',linewidth=0.3)
//b代表是否显示网格, which代表显示网格类型, axis表示显示哪个方向的网格, linewidth代表网格线宽度
八、设置标题
plt.title("标题")
九、设置x、y轴的刻度标签
plt.xlabel("X轴")
plt.ylabel("Y轴")
十、设置契形图宽度、半径、保留n位小数
plt.plot(data, radius=1.3, wedgeprops={'width':0.8}, labels=pie_labels,colors=['yellow','purple','cyan','black','white'], autopct='%3.1f%%')
//radius 扇形或契形的半径
//wedgeprops 控制扇形或契形属性的字典,如wedgeprops={'width':0.8},将契形的宽度设置为0.8
//labels 扇形或契形的标签文本
//colors 扇形或契形的颜色
//autopct 控制扇形或契形的数值显示的字符串
折线
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
x = np.arange(4, 19)
y_max = np.array([32, 33, 34, 34, 33, 31, 30, 29, 30, 29, 26, 23, 21, 25, 31])
y_min = np.array([19, 19, 20, 22, 22, 21, 22, 16, 18, 18, 17, 14, 15, 16, 16])
# 绘制折线图
plt.grid(b=True, which='major', axis='both' )
plt.plot(x, y_max, color='purple', ls='--')
plt.plot(x, y_min, color='black', ls=':')
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.title("未来15天的最高气温和最低气温")
plt.show()
条形
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.arange(5)
y1 = [74,93,84,81,79]#甲成绩
y2 = [88,83,97,74,72]#乙成绩
width = 0.3
labels=["语文","数学","英语","物理","化学"]
plt.bar(x,y1,tick_label=labels,width=width, color='red')
plt.bar(x+width,y2,width=width, color='blue')
plt.show()
圆环
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = np.array([931,430,210,68,413,148,100,310])
pie_labels = np.array(["伙食","零食","学习","通讯","服饰","交通","娱乐","其他"])
plt.pie(data, radius=1.3, wedgeprops={'width': 0.75},
labels=pie_labels,colors=['red','green','blue','yellow'], autopct='%3.1f%%')
plt.title("6月消费情况")
plt.show()
条形
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.arange(6)
y1 = [174,93,284,21,43,74]#甲国家发电量
y2 = [88,283,97,34,75,46]#乙国家发电量
width = 0.3
labels=["水电","火电","核电","风电","太阳能","其他"]
plt.bar(x,y1,tick_label=labels,width=width, color='red')
plt.bar(x+width,y2,width=width, color='blue')
plt.show()
圆环
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = np.array([542,334,189,2304,830,810,410])
pie_labels = np.array(["东北","华北","华东","华中","华南","西南","西北"])
plt.pie(data, radius=1.3, wedgeprops={'width': 0.8},
labels=pie_labels,colors=['yellow','purple','cyan','black','white'], autopct='%3.1f%%')
plt.title("2023级新生来源地区")
plt.show()