欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言<--->Python第三章--图形初阶

程序员文章站 2022-07-14 20:45:51
...

图形初阶

使用图形

import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris

data = load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target
df.head()
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
0 5.1 3.5 1.4 0.2 0
1 4.9 3.0 1.4 0.2 0
2 4.7 3.2 1.3 0.2 0
3 4.6 3.1 1.5 0.2 0
4 5.0 3.6 1.4 0.2 0
plt.plot(df['sepal length (cm)'], df['sepal width (cm)'], 'o')
plt.title("Relevance between Sepal_length and Sepal_width")
plt.savefig("mygraph.pdf")
plt.show()

R语言<--->Python第三章--图形初阶

一个简单的例子

dose = [20, 30, 40, 45, 60]
drugA = [16, 20, 27, 40, 60]
drugB = [15, 18, 25, 31, 40]
plt.plot(dose, drugA, marker="o", mfc="white") # markerfacecolor
plt.xlabel("drugA")
plt.ylabel("dose")
plt.show()

R语言<--->Python第三章--图形初阶

图形参数

import matplotlib as mpl

方法一:matplotlib.rcParams

rc = mpl.rcParams # 参数字典
rc['lines.linestyle'] = "-."
rc['lines.marker'] = "^"

plt.plot(dose, drugA)
plt.xlabel("drugA")
plt.ylabel("dose")
plt.show()
mpl.rcdefaults() # 恢复默认值

R语言<--->Python第三章--图形初阶

方法二:matplotlib.rcParams.update

params = {'lines.linestyle':'-.',
          'lines.marker':'^'}
mpl.rcParams.update(params)

plt.plot(dose, drugA)
plt.xlabel("drugA")
plt.ylabel("dose")
plt.show()
mpl.rcdefaults() # 恢复默认值

R语言<--->Python第三章--图形初阶

方法三:matplotlib.rc

mpl.rc('lines', linewidth=3.5, linestyle=':')

plt.plot(dose, drugA)
plt.xlabel("drugA")
plt.ylabel("dose")
plt.show()
mpl.rcdefaults() # 恢复默认值

R语言<--->Python第三章--图形初阶

符号和线条

参数 描述
marker 绘制点时使用的符号
markersize 符号大小
markeredgewidth(mew) 符号边缘宽度
linestyle(ls) 线条类型
linewidth(lw) 线条宽度

marker

R语言<--->Python第三章--图形初阶

linestyle

R语言<--->Python第三章--图形初阶

plt.plot(dose, drugA, ls='--', lw='2.5', marker='s', markersize=6)
plt.show()

R语言<--->Python第三章--图形初阶

颜色

参数 描述
color© 线条颜色
markeredgecolor(mec) 符号边缘颜色
markerfacecolor(mfc) 符号填充颜色
axes.edgecolor 图表边框颜色
axes.facecolor 图表前景颜色
axes.labelcolor 坐标轴标签颜色
axes.titlecolor 图表标题颜色
figure.edgecolor @@@@
figure.facecolor 图层前景色
xtick.color x轴刻度颜色
ytick.color y轴刻度颜色
grid.color 网格线颜色

方法一:通过rcParams全局控制

color_dict = {'axes.edgecolor':'b',
              'axes.facecolor':'gray',
              'axes.labelcolor':'r',
              'axes.titlecolor':'y',
              'figure.edgecolor':'red',
              'figure.facecolor':'g',
              'xtick.color':'r',
              'ytick.color':'r',
              'grid.color':'b'}
mpl.rcParams.update(color_dict)

plt.plot(dose, drugA, color='r')
plt.title("Title")
plt.xlabel("X_label")
plt.ylabel("Y_label")
plt.grid() # 开启网格线
plt.show()
mpl.rcdefaults()

R语言<--->Python第三章--图形初阶

方法二:plt画图时通过fontdict局部控制

plt.plot(dose, drugA, color='r')
plt.title("Title", fontdict={'color':'r'})
plt.xlabel("X_label", fontdict={'color':'g'})
plt.ylabel("Y_label", fontdict={'color':'b'})
plt.grid(color='y')

R语言<--->Python第三章--图形初阶

方法三:ax画图时通过fontdict控制

fig, ax = plt.subplots()

ax.plot(dose, drugA)
ax.set_title('Title', fontdict={'color':'r'})
ax.set_xlabel('X_label', fontdict={'color':'g'})

ytick = ax.get_yticks()
# print(ytick)
ax.set_yticks(ytick) # 设置y轴刻度位置
ax.set_yticklabels(ytick, fontdict={'color':'b'}) # 设置y轴刻度标识
ax.tick_params(axis='y', color='r', width=2) # 这个方法包含更多的可调参数
plt.show()

R语言<--->Python第三章--图形初阶

调色工具Palettable

安装:pip install palettable
详情:https://jiffyclub.github.io/palettable/

from palettable.colorbrewer.sequential import GnBu_7
# GnBu_7.mpl_colors返回一个matplotlib可用的0-1间的RGB列表
plt.bar(list(range(7)), 1, color=GnBu_7.mpl_colors)
<BarContainer object of 7 artists>

R语言<--->Python第三章--图形初阶

文本属性–通过fontdict参数控制

font_dict = {'family':'fantasy',
             'size':15,
             'style':'italic', # 斜体
             'weight':'bold',
             }

plt.plot(dose, drugA)
plt.title("Title", fontdict=font_dict)
plt.xlabel("X_label")
plt.ylabel("Y_label")
plt.xticks(rotation=30) # **kwargs
plt.show()

R语言<--->Python第三章--图形初阶

文本属性的可调参数来源于matplotlib.text.Text类,详情见https://matplotlib.org/api/text_api.html#matplotlib.text.Text

图形尺寸

在创建图层时确定尺寸

plt.figure(figsize=(10,6))

plt.plot(dose, drugA)
plt.show()

R语言<--->Python第三章--图形初阶

## 使用图形参数控制图形外观
dose = [20, 30, 40, 45, 60]
drugA = [16, 20, 27, 40, 60]
drugB = [15, 18, 25, 31, 40]

mpl.rc('lines', lw=2)
mpl.rc('font', size=15)

plt.figure(figsize=(14,8))
plt.subplot(121)
plt.plot(dose, drugA, ls='--', marker='o', color='r')
plt.xlabel('dose')
plt.ylabel('drugA')
plt.xticks(style='italic')
plt.yticks(style='italic')

plt.subplot(122)
plt.plot(dose, drugB, ls='-.', marker='D', color='blue', mfc='blue', mec='green', mew=2)
plt.xlabel('dose')
plt.ylabel('drugB')
plt.xticks(style='italic')
plt.yticks(style='italic')

mpl.rcdefaults()

R语言<--->Python第三章--图形初阶

添加文本、自定义坐标轴和图例

plt.plot(dose, drugA, ls='--', marker='^',
         c='r', lw='2')
plt.title("Clinical Trials for Drug A", weight='bold')
plt.suptitle("This is hypothetial data", y=0) # y指定纵方向位置
plt.xlabel("Dosage")
plt.ylabel("Drug Response")
plt.xlim((0, 60)) # x轴范围
plt.ylim((0, 70)) # y轴范围
plt.show()

R语言<--->Python第三章--图形初阶

标题

plt.title('My Title', color='red')
Text(0.5, 1.0, 'My Title')

R语言<--->Python第三章--图形初阶

**坐标轴

参考线

plt.axhline(0.5, xmin=0.2, xmax=0.8, c='r', ls='--')
<matplotlib.lines.Line2D at 0x1a78e42aec8>

R语言<--->Python第三章--图形初阶

图例

plt.plot(dose, drugA, c='r', marker='D', label='A')
plt.plot(dose, drugB, c='b', ls='--', marker='^', label='B')
plt.axhline(y=30, lw='.5', ls='--', c='gray')

plt.title("Drug A vs. Drug B", weight='bold')
plt.xlabel("Drug Dosage")
plt.ylabel("Drug Response")
plt.ylim((0, 60))
plt.legend(title='Drug Type')
plt.show()

R语言<--->Python第三章--图形初阶

文本标注

plt.text(x=0.5, y=0.5, s='My Text')
Text(0.5, 0.5, 'My Text')

R语言<--->Python第三章--图形初阶

df = pd.read_csv("mtcars.csv", index_col=0)
df.head()
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
plt.plot(df.wt, df.mpg, 'o', marker='D', markersize=3, c='b')
for i in range(len(df)):
    plt.text(df.wt[i]+0.06, df.mpg[i]-0.2, df.index[i], fontsize=7, style='italic')
plt.title("Mileage vs. Car Weight", weight='bold')
plt.xlabel("Weight")
plt.ylabel("Mileage")
plt.show()

R语言<--->Python第三章--图形初阶

plt.rc('font', size=15)
plt.text(0.2, 0.5, 'Example of serif text', family='serif')
plt.text(0.2, 0.6, 'Example of sans-serif text', family='fans-serif')
plt.text(0.2, 0.7, 'Example of fantasy text', family='fantasy')
plt.text(0.2, 0.8, 'Example of monospace text', family='monospace')

plt.rcdefaults()

R语言<--->Python第三章--图形初阶

数学标注

plt.title('$Math Annotation \\beta$')
plt.text(0.5, 0.5, '$\\alpha \\lambda \\beta$')
plt.ylabel('$\\alpha$')
plt.xlabel('$\\delta$')
plt.show()

R语言<--->Python第三章--图形初阶

图形的组合

df.head()
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
mpl.rc('axes', titleweight='bold')
mpl.rc('lines', markerfacecolor='white', markeredgecolor='black')
plt.figure(figsize=(14,8))

plt.subplot(2,2,1)
plt.plot(df.wt, df.mpg, 'o')
plt.title("Scatterplot of wt vs. mpg")

plt.subplot(2,2,2)
plt.plot(df.wt, df.disp, 'o')
plt.title("Scatterplot of wt vs. disp")

plt.subplot(2,2,3)
plt.hist(df.wt, fc='white', ec='black') # facecolor, edgecolor
plt.title("Histogram of wt")

plt.subplot(2,2,4)
plt.boxplot(df.wt)
plt.title("Boxplot of wt")

mpl.rcdefaults()

R语言<--->Python第三章--图形初阶

fig, ax = plt.subplots(3,1)

ax[0].hist(df.wt)
ax[1].hist(df.mpg)
ax[2].hist(df.disp)

plt.show()

R语言<--->Python第三章--图形初阶

更加精细的调节

fig = plt.figure(constrained_layout=True) # 自动调整布局
gs = fig.add_gridspec(2,2)

plt.subplot(gs[0,:])
plt.hist(df.wt)

plt.subplot(gs[1,0])
plt.hist(df.mpg)

plt.subplot(gs[1,1])
plt.hist(df.disp)

plt.show()

R语言<--->Python第三章--图形初阶

下图中,第1行图的高度是第二行的 1 / 2 1/2 1/2,右下角图的宽度是左下角的 1 / 3 1/3 1/3

fig = plt.figure(constrained_layout=True) # 自动调整布局
gs = fig.add_gridspec(nrows=3, ncols=4)

plt.subplot(gs[0,:])
plt.hist(df.wt)

plt.subplot(gs[1:,0:3])
plt.hist(df.mpg)

plt.subplot(gs[1:,3])
plt.hist(df.disp)

plt.show()

R语言<--->Python第三章--图形初阶