一、平行坐标图
平行坐标图是对于具有多个属性问题的一种可视化方法,下图为平行坐标图的基本样式,数据集的一行数据在平行坐标图中用一条折线表示,纵向是属性值,横向是属性类别(用索引表示)。
pandas.plotting.parallel_coordinates(frame, class_column, cols=None, ax=None, color=None, use_columns=False, xticks=None, colormap=None, axvlines=True, axvlines_kwds=None, sort_labels=False, **kwargs)
(1)导入数据
import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import parallel_coordinates
# 解决中文不能正常显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
# (1)导入数据
df_final = pd.read_csv("./diamonds_filter.csv")
(2)绘制平行坐标图
# (2)绘制平行坐标图
plt.figure(figsize=(8,6), dpi= 80)
parallel_coordinates(df_final, 'cut', colormap='Dark2')
(3)设置图形样式
# (3)设置边框
plt.gca().spines["top"].set_alpha(0)
plt.gca().spines["bottom"].set_alpha(.3)
plt.gca().spines["right"].set_alpha(0)
plt.gca().spines["left"].set_alpha(.3)
# (4)设置标题,网格,标签
plt.title('钻石的平行坐标图', fontsize=22)
plt.grid(alpha=0.3)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()
二、成对关系图
pairplot主要展现的是变量两两之间的关系
kind:用于控制非对角线上的图的类型,可选"scatter"与"reg"
diag_kind:控制对角线上的图的类型,可选"hist"与"kde"
(1)加载鸢尾花数据
import matplotlib.pyplot as plt
import seaborn as sns
# (1)数据准备
iris = sns.load_dataset('iris')
print(iris)
(2)用seaborn画成对关系
# (2)用 Seaborn 画成对关系
sns.pairplot(iris)
plt.show()
(3)结果展示
可以看到对角线上是各个属性的直方图(分布图),而非对角线上是两个不同属性之间的相关图,从图中我们发现,花瓣的长度和宽度之间以及萼片的长短和花瓣的长、宽之间具有比较明显的相关关系。
三、折线图
(1)导入肺病数据
import pandas as pd
import matplotlib.pyplot as plt
# 解决中文不能正常显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
# (1) 导入数据
df = pd.read_csv('./data/mortality.csv')
(2)设置上下限以及标尺刻度
# (2)设置y轴上下限值以及标尺刻度间隔值
y_LL = 100 # y轴最小值
y_UL = int(df.iloc[:, 1:].max().max()*1.1)
# y轴最大值,先求得每一列的最大值,再从所有最大值中取最大值
y_interval = 400 # y轴标尺刻度间隔
(3)绘制折线图
# (3)添加画布
fig, ax = plt.subplots(1,1,figsize=(16, 9), dpi= 80)
# (4)准备颜色
mycolors = ['tab:red', 'tab:blue', 'tab:green', 'tab:orange']
# (5) 针对mdeaths、fdeaths列数据依次绘制折线图
columns = df.columns[1:] # 取出第二列以后的所有列名,即mdeaths、fdeaths
for i, column in enumerate(columns):
plt.plot(df.date.values, df[column].values, lw=1.5, color=mycolors[i])
plt.text(df.shape[0]+1, df[column].values[-1], column, fontsize=14, color=mycolors[i])
(4)美化图形样式
#(6)基于y轴,每隔400绘制一条间隔线
for y in range(y_LL, y_UL, y_interval):
plt.hlines(y, xmin=0, xmax=71, colors='black', alpha=0.3, linestyles="--", lw=0.5)
# (7)设置x轴、y轴的刻度不显示
plt.tick_params(axis="both", which="both", bottom=False, top=False,
labelbottom=True, left=False, right=False, labelleft=True)
# (8)设置边框
plt.gca().spines["top"].set_alpha(.3)
plt.gca().spines["bottom"].set_alpha(.3)
plt.gca().spines["right"].set_alpha(.3)
plt.gca().spines["left"].set_alpha(.3)
# (9)设置标题,x轴时间数据,y轴标尺刻度
plt.title('英国死于肺病的人数(1974-1979)', fontsize=22)
plt.yticks(range(y_LL, y_UL, y_interval), [str(y) for y in range(y_LL, y_UL, y_interval)], fontsize=12)
plt.xticks(range(0, df.shape[0], 12), df.date.values[::12], horizontalalignment='left', fontsize=12)
plt.ylim(y_LL, y_UL)
plt.xlim(-2, 80)
plt.show()