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

这个专题尝试用Python复刻《R语言实战》(第2版),章节标题与原书基本一致。


图形初阶

使用图形

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
05.13.51.40.20
14.93.01.40.20
24.73.21.30.20
34.63.11.50.20
45.03.61.40.20
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()

在这里插入图片描述

一个简单的例子

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()

在这里插入图片描述

图形参数

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() # 恢复默认值

在这里插入图片描述

方法二: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() # 恢复默认值

在这里插入图片描述

方法三:matplotlib.rc

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

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

在这里插入图片描述

符号和线条

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

在这里插入图片描述

linestyle

在这里插入图片描述

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

在这里插入图片描述

颜色

参数描述
color©线条颜色
markeredgecolor(mec)符号边缘颜色
markerfacecolor(mfc)符号填充颜色
axes.edgecolor图表边框颜色
axes.facecolor图表前景颜色
axes.labelcolor坐标轴标签颜色
axes.titlecolor图表标题颜色
figure.edgecolor@@@@
figure.facecolor图层前景色
xtick.colorx轴刻度颜色
ytick.colory轴刻度颜色
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()

在这里插入图片描述

方法二: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')

在这里插入图片描述

方法三: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()

在这里插入图片描述

调色工具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>

在这里插入图片描述

文本属性–通过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()

在这里插入图片描述

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

图形尺寸

在创建图层时确定尺寸

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

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

在这里插入图片描述

## 使用图形参数控制图形外观
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()

在这里插入图片描述

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

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()

在这里插入图片描述

标题

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

在这里插入图片描述

**坐标轴

参考线

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

在这里插入图片描述

图例

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()

在这里插入图片描述

文本标注

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

在这里插入图片描述

df = pd.read_csv("mtcars.csv", index_col=0)
df.head()
mpgcyldisphpdratwtqsecvsamgearcarb
Mazda RX421.06160.01103.902.62016.460144
Mazda RX4 Wag21.06160.01103.902.87517.020144
Datsun 71022.84108.0933.852.32018.611141
Hornet 4 Drive21.46258.01103.083.21519.441031
Hornet Sportabout18.78360.01753.153.44017.020032
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()

在这里插入图片描述

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()

在这里插入图片描述

数学标注

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

在这里插入图片描述

图形的组合

df.head()
mpgcyldisphpdratwtqsecvsamgearcarb
Mazda RX421.06160.01103.902.62016.460144
Mazda RX4 Wag21.06160.01103.902.87517.020144
Datsun 71022.84108.0933.852.32018.611141
Hornet 4 Drive21.46258.01103.083.21519.441031
Hornet Sportabout18.78360.01753.153.44017.020032
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()

在这里插入图片描述

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

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

plt.show()

在这里插入图片描述

更加精细的调节

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()

在这里插入图片描述

下图中,第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()

在这里插入图片描述


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值