Python基础(十二) 还不会python绘图?两万字博文教你Matplotlib库(超详细总结)_python绘图不从头开始(1)

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 调整坐标轴刻度

plt.xticks(np.arange(0, 12, step=1))

x = np.linspace(0, 10, 100)
plt.plot(x, x\*\*2)
plt.xticks(np.arange(0, 12, step=1))

([<matplotlib.axis.XTick at 0x18846412828>,
  <matplotlib.axis.XTick at 0x18847665898>,
  <matplotlib.axis.XTick at 0x18847665630>,
  <matplotlib.axis.XTick at 0x18847498978>,
  <matplotlib.axis.XTick at 0x18847498390>,
  <matplotlib.axis.XTick at 0x18847497d68>,
  <matplotlib.axis.XTick at 0x18847497748>,
  <matplotlib.axis.XTick at 0x18847497438>,
  <matplotlib.axis.XTick at 0x1884745f438>,
  <matplotlib.axis.XTick at 0x1884745fd68>,
  <matplotlib.axis.XTick at 0x18845fcf4a8>,
  <matplotlib.axis.XTick at 0x18845fcf320>],
 <a list of 12 Text xticklabel objects>)

png

x = np.linspace(0, 10, 100)
plt.plot(x, x\*\*2)
plt.xticks(np.arange(0, 12, step=1), fontsize=15)
plt.yticks(np.arange(0, 110, step=10))

([<matplotlib.axis.YTick at 0x188474f0860>,
  <matplotlib.axis.YTick at 0x188474f0518>,
  <matplotlib.axis.YTick at 0x18847505a58>,
  <matplotlib.axis.YTick at 0x188460caac8>,
  <matplotlib.axis.YTick at 0x1884615c940>,
  <matplotlib.axis.YTick at 0x1884615cdd8>,
  <matplotlib.axis.YTick at 0x1884615c470>,
  <matplotlib.axis.YTick at 0x1884620c390>,
  <matplotlib.axis.YTick at 0x1884611f898>,
  <matplotlib.axis.YTick at 0x188461197f0>,
  <matplotlib.axis.YTick at 0x18846083f98>],
 <a list of 11 Text yticklabel objects>)

png

  • 调整刻度样式

plt.tick_params(axis=“both”, labelsize=15)

x = np.linspace(0, 10, 100)
plt.plot(x, x\*\*2)
plt.tick_params(axis="both", labelsize=15)

png

【3】设置图形标签
x = np.linspace(0, 2\*np.pi, 100)
plt.plot(x, np.sin(x))
plt.title("A Sine Curve", fontsize=20)
plt.xlabel("x", fontsize=15)
plt.ylabel("sin(x)", fontsize=15)

Text(0, 0.5, 'sin(x)')

png

【4】设置图例

  • 默认
x = np.linspace(0, 2\*np.pi, 100)
plt.plot(x, np.sin(x), "b-", label="Sin")
plt.plot(x, np.cos(x), "r--", label="Cos")
plt.legend()

<matplotlib.legend.Legend at 0x1884749f908>

png

  • 修饰图例
import matplotlib.pyplot as plt 
import numpy as np
x = np.linspace(0, 2\*np.pi, 100)
plt.plot(x, np.sin(x), "b-", label="Sin")
plt.plot(x, np.cos(x), "r--", label="Cos")
plt.ylim(-1.5, 2)
plt.legend(loc="upper center", frameon=True, fontsize=15) # frameon=True增加图例的边框

<matplotlib.legend.Legend at 0x19126b53b80>

png

【5】添加文字和箭头

  • 添加文字
x = np.linspace(0, 2\*np.pi, 100)
plt.plot(x, np.sin(x), "b-")
plt.text(3.5, 0.5, "y=sin(x)", fontsize=15) # 前两个为文字的坐标,后面是内容和字号

Text(3.5, 0.5, 'y=sin(x)')

png

  • 添加箭头
x = np.linspace(0, 2\*np.pi, 100)
plt.plot(x, np.sin(x), "b-")
plt.annotate('local min', xy=(1.5\*np.pi, -1), xytext=(4.5, 0),
             arrowprops=dict(facecolor='black', shrink=0.1),
             )

Text(4.5, 0, 'local min')

png

13.1.2 散点图

【1】简单散点图

x = np.linspace(0, 2\*np.pi, 20)
plt.scatter(x, np.sin(x), marker="o", s=30, c="r")    # s 大小 c 颜色

<matplotlib.collections.PathCollection at 0x188461eb4a8>

png

【2】颜色配置

x = np.linspace(0, 10, 100)
y = x\*\*2
plt.scatter(x, y, c=y, cmap="inferno")  # 让c随着y的值变化在cmap中进行映射
plt.colorbar() # 输出颜色条

<matplotlib.colorbar.Colorbar at 0x18848d392e8>

png

颜色配置参考官方文档

https://matplotlib.org/examples/color/colormaps_reference.html

【3】根据数据控制点的大小

x, y, colors, size = (np.random.rand(100) for i in range(4))
plt.scatter(x, y, c=colors, s=1000\*size, cmap="viridis")

<matplotlib.collections.PathCollection at 0x18847b48748>

png

【4】透明度

x, y, colors, size = (np.random.rand(100) for i in range(4))
plt.scatter(x, y, c=colors, s=1000\*size, cmap="viridis", alpha=0.3)
plt.colorbar()

<matplotlib.colorbar.Colorbar at 0x18848f2be10>

png

【例】随机漫步

from random import choice

class RandomWalk():
    """一个生产随机漫步的类"""
    def \_\_init\_\_(self, num_points=5000):
        self.num_points = num_points
        self.x_values = [0]
        self.y_values = [0]
    
    def fill\_walk(self):
        while len(self.x_values) < self.num_points:
            x_direction = choice([1, -1])
            x_distance = choice([0, 1, 2, 3, 4])
            x_step = x_direction \* x_distance
            
            y_direction = choice([1, -1])
            y_distance = choice([0, 1, 2, 3, 4])
            y_step = y_direction \* y_distance            
        
            if x_step == 0 or y_step == 0:
                continue
            next_x = self.x_values[-1] + x_step
            next_y = self.y_values[-1] + y_step
            self.x_values.append(next_x)
            self.y_values.append(next_y)

rw = RandomWalk(10000)
rw.fill_walk()
point_numbers = list(range(rw.num_points))
plt.figure(figsize=(12, 6))        # 设置画布大小 
plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap="inferno", s=1)
plt.colorbar()
plt.scatter(0, 0, c="green", s=100)
plt.scatter(rw.x_values[-1], rw.y_values[-1], c="red", s=100)

plt.xticks([])
plt.yticks([])

([], <a list of 0 Text yticklabel objects>)


png

13.1.3 柱形图

【1】简单柱形图

x = np.arange(1, 6)
plt.bar(x, 2\*x, align="center", width=0.5, alpha=0.5, color='yellow', edgecolor='red')
plt.tick_params(axis="both", labelsize=13)

png

x = np.arange(1, 6)
plt.bar(x, 2\*x, align="center", width=0.5, alpha=0.5, color='yellow', edgecolor='red')
plt.xticks(x, ('G1', 'G2', 'G3', 'G4', 'G5'))
plt.tick_params(axis="both", labelsize=13) 

png

x = ('G1', 'G2', 'G3', 'G4', 'G5')
y = 2 \* np.arange(1, 6)
plt.bar(x, y, align="center", width=0.5, alpha=0.5, color='yellow', edgecolor='red')
plt.tick_params(axis="both", labelsize=13) 

png

x = ["G"+str(i) for i in range(5)]
y = 1/(1+np.exp(-np.arange(5)))

colors = ['red', 'yellow', 'blue', 'green', 'gray']
plt.bar(x, y, align="center", width=0.5, alpha=0.5, color=colors)
plt.tick_params(axis="both", labelsize=13)

png

【2】累加柱形图

x = np.arange(5)
y1 = np.random.randint(20, 30, size=5)
y2 = np.random.randint(20, 30, size=5)
plt.bar(x, y1, width=0.5, label="man")
plt.bar(x, y2, width=0.5, bottom=y1, label="women")
plt.legend()

<matplotlib.legend.Legend at 0x2052db25cc0>

png

【3】并列柱形图

x = np.arange(15)
y1 = x+1
y2 = y1+np.random.random(15)
plt.bar(x, y1, width=0.3, label="man")
plt.bar(x+0.3, y2, width=0.3, label="women")
plt.legend()

<matplotlib.legend.Legend at 0x2052daf35f8>

png

【4】横向柱形图barh

x = ['G1', 'G2', 'G3', 'G4', 'G5']
y = 2 \* np.arange(1, 6)
plt.barh(x, y, align="center", height=0.5, alpha=0.8, color="blue", edgecolor="red") # 注意这里将bar改为barh,宽度用height设置
plt.tick_params(axis="both", labelsize=13)

png

13.1.4 多子图

【1】简单多子图

def f(t):
    return np.exp(-t) \* np.cos(2\*np.pi\*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.subplot(211)
plt.plot(t1, f(t1), "bo-", markerfacecolor="r", markersize=5)
plt.title("A tale of 2 subplots")
plt.ylabel("Damped oscillation")

plt.subplot(212)
plt.plot(t2, np.cos(2\*np.pi\*t2), "r--")
plt.xlabel("time (s)")
plt.ylabel("Undamped")

Text(0, 0.5, 'Undamped')

png

【2】多行多列子图

x = np.random.random(10)
y = np.random.random(10)

plt.subplots_adjust(hspace=0.5, wspace=0.3)

plt.subplot(321)
plt.scatter(x, y, s=80, c="b", marker=">")

plt.subplot(322)
plt.scatter(x, y, s=80, c="g", marker="\*")

plt.subplot(323)
plt.scatter(x, y, s=80, c="r", marker="s")

plt.subplot(324)
plt.scatter(x, y, s=80, c="c", marker="p")

plt.subplot(325)
plt.scatter(x, y, s=80, c="m", marker="+")

plt.subplot(326)
plt.scatter(x, y, s=80, c="y", marker="H")

<matplotlib.collections.PathCollection at 0x2052d9f63c8>

png

【3】不规则多子图

def f(x):
    return np.exp(-x) \* np.cos(2\*np.pi\*x)


x = np.arange(0.0, 3.0, 0.01)
grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3) # 两行三列的网格

plt.subplot(grid[0, 0]) # 第一行第一列位置
plt.plot(x, f(x))

plt.subplot(grid[0, 1:]) # 第一行后两列的位置
plt.plot(x, f(x), "r--", lw=2)

plt.subplot(grid[1, :]) # 第二行所有位置
plt.plot(x, f(x), "g-.", lw=3)

[<matplotlib.lines.Line2D at 0x2052d6fae80>]

png

13.1.5 直方图

【1】普通频次直方图

mu, sigma = 100, 15
x = mu + sigma \* np.random.randn(10000)

plt.hist(x, bins=50, facecolor='g', alpha=0.75)

(array([  1.,   0.,   0.,   5.,   3.,   5.,   1.,  10.,  15.,  19.,  37.,
         55.,  81.,  94., 125., 164., 216., 258., 320., 342., 401., 474.,
        483., 590., 553., 551., 611., 567., 515., 558., 470., 457., 402.,
        347., 261., 227., 206., 153., 128.,  93.,  79.,  41.,  22.,  17.,
         21.,   9.,   2.,   8.,   1.,   2.]),
 array([ 40.58148736,  42.82962161,  45.07775586,  47.32589011,
         49.57402436,  51.82215862,  54.07029287,  56.31842712,
         58.56656137,  60.81469562,  63.06282988,  65.31096413,
         67.55909838,  69.80723263,  72.05536689,  74.30350114,
         76.55163539,  78.79976964,  81.04790389,  83.29603815,
         85.5441724 ,  87.79230665,  90.0404409 ,  92.28857515,
         94.53670941,  96.78484366,  99.03297791, 101.28111216,
        103.52924641, 105.77738067, 108.02551492, 110.27364917,
        112.52178342, 114.76991767, 117.01805193, 119.26618618,
        121.51432043, 123.76245468, 126.01058893, 128.25872319,
        130.50685744, 132.75499169, 135.00312594, 137.25126019,
        139.49939445, 141.7475287 , 143.99566295, 146.2437972 ,
        148.49193145, 150.74006571, 152.98819996]),
 <a list of 50 Patch objects>)

png

【2】概率密度

mu, sigma = 100, 15
x = mu + sigma \* np.random.randn(10000)

plt.hist(x, 50, density=True, color="r")# 概率密度图
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.xlim(40, 160)
plt.ylim(0, 0.03)

(0, 0.03)

png

mu, sigma = 100, 15
x = mu + sigma \* np.random.randn(10000)

plt.hist(x, bins=50, density=True, color="r", histtype='step') #不填充,只获得边缘
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.xlim(40, 160)
plt.ylim(0, 0.03)

(0, 0.03)

png

from scipy.stats import norm
mu, sigma = 100, 15 # 想获得真正高斯分布的概率密度图
x = mu + sigma \* np.random.randn(10000)
# 先获得bins,即分配的区间
_, bins, __ = plt.hist(x, 50, density=True)
y = norm.pdf(bins, mu, sigma) # 通过norm模块计算符合的概率密度
plt.plot(bins, y, 'r--', lw=3)  
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.xlim(40, 160)
plt.ylim(0, 0.03)

(0, 0.03)

png

【3】累计概率分布

mu, sigma = 100, 15
x = mu + sigma \* np.random.randn(10000)

plt.hist(x, 50, density=True, cumulative=True, color="r") # 将累计cumulative设置为true即可
plt.xlabel('Smarts')
plt.ylabel('Cum\_Probability')
plt.title('Histogram of IQ')
plt.text(60, 0.8, r'$\mu=100,\ \sigma=15$')
plt.xlim(50, 165)
plt.ylim(0, 1.1)

(0, 1.1)

png

【例】模拟投两个骰子

class Die():
    "模拟一个骰子的类"
    
    def \_\_init\_\_(self, num_sides=6):
        self.num_sides = num_sides
    
    def roll(self):
        return np.random.randint(1, self.num_sides+1)

  • 重复投一个骰子
die = Die()
results = []
for i in range(60000):
    result = die.roll()
    results.append(result)
    
plt.hist(results, bins=6, range=(0.75, 6.75), align="mid", width=0.5)
plt.xlim(0 ,7)

(0, 7)

png

  • 重复投两个骰子
die1 = Die()
die2 = Die()
results = []
for i in range(60000):
    result = die1.roll()+die2.roll()
    results.append(result)
    
plt.hist(results, bins=11, range=(1.75, 12.75), align="mid", width=0.5)
plt.xlim(1 ,13)
plt.xticks(np.arange(1, 14))

([<matplotlib.axis.XTick at 0x2052fae23c8>,
  <matplotlib.axis.XTick at 0x2052ff1fa20>,
  <matplotlib.axis.XTick at 0x2052fb493c8>,
  <matplotlib.axis.XTick at 0x2052e9b5a20>,
  <matplotlib.axis.XTick at 0x2052e9b5e80>,
  <matplotlib.axis.XTick at 0x2052e9b5978>,
  <matplotlib.axis.XTick at 0x2052e9cc668>,
  <matplotlib.axis.XTick at 0x2052e9ccba8>,
  <matplotlib.axis.XTick at 0x2052e9ccdd8>,
  <matplotlib.axis.XTick at 0x2052fac5668>,
  <matplotlib.axis.XTick at 0x2052fac5ba8>,
  <matplotlib.axis.XTick at 0x2052fac5dd8>,
  <matplotlib.axis.XTick at 0x2052fad9668>],
 <a list of 13 Text xticklabel objects>)

png

13.1.6 误差图

【1】基本误差图

x = np.linspace(0, 10 ,50)
dy = 0.5 # 每个点的y值误差设置为0.5
y = np.sin(x) + dy\*np.random.randn(50)

plt.errorbar(x, y , yerr=dy, fmt="+b")

<ErrorbarContainer object of 3 artists>

png

【2】柱形图误差图

menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
menStd = (2, 3, 4, 1, 2)
womenStd = (3, 5, 2, 3, 3)
ind = ['G1', 'G2', 'G3', 'G4', 'G5'] 
width = 0.35       

p1 = plt.bar(ind, menMeans, width=width, label="Men", yerr=menStd)
p2 = plt.bar(ind, womenMeans, width=width, bottom=menMeans, label="Men", yerr=womenStd)

plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.yticks(np.arange(0, 81, 10))
plt.legend()

<matplotlib.legend.Legend at 0x20531035630>

png

13.1.7 面向对象的风格简介

【例1】 普通图

x = np.linspace(0, 5, 10)
y = x \*\* 2

fig = plt.figure(figsize=(8,4), dpi=80)        # 图像
axes = fig.add_axes([0.1, 0.1, 0.8, 0.8])      # 轴 left, bottom, width, height (range 0 to 1)

axes.plot(x, y, 'r')
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('title')

Text(0.5, 1.0, 'title')

png

【2】画中画

x = np.linspace(0, 5, 10)
y = x \*\* 2

fig = plt.figure()

ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) 
ax2 = fig.add_axes([0.2, 0.5, 0.4, 0.3]) 

ax1.plot(x, y, 'r')

ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('title')

ax2.plot(y, x, 'g')
ax2.set_xlabel('y')
ax2.set_ylabel('x')
ax2.set_title('insert title')

Text(0.5, 1.0, 'insert title')

png

【3】 多子图

def f(t):
    return np.exp(-t) \* np.cos(2\*np.pi\*t)


t1 = np.arange(0.0, 3.0, 0.01)

fig= plt.figure()
fig.subplots_adjust(hspace=0.4, wspace=0.4)

ax1 = plt.subplot(2, 2, 1)
ax1.plot(t1, f(t1))
ax1.set_title("Upper left")

ax2 = plt.subplot(2, 2, 2)
ax2.plot(t1, f(t1))
ax2.set_title("Upper right")

ax3 = plt.subplot(2, 1, 2)
ax3.plot(t1, f(t1))
ax3.set_title("Lower")

Text(0.5, 1.0, 'Lower')

png

13.1.8 三维图形简介

【1】三维数据点与线

from mpl_toolkits import mplot3d # 注意要导入mplot3d

ax = plt.axes(projection="3d")
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline)
ax.plot3D(xline, yline ,zline)# 线的绘制

zdata = 15\*np.random.random(100)
xdata = np.sin(zdata)
ydata = np.cos(zdata)
ax.scatter3D(xdata, ydata ,zdata, c=zdata, cmap="spring") # 点的绘制

<mpl_toolkits.mplot3d.art3d.Path3DCollection at 0x2052fd1e5f8>

png

【2】三维数据曲面图

def f(x, y):
    return np.sin(np.sqrt(x\*\*2 + y\*\*2))

x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y) # 网格化
Z = f(X, Y)

ax = plt.axes(projection="3d")
ax.plot_surface(X, Y, Z, cmap="viridis") # 设置颜色映射

<mpl_toolkits.mplot3d.art3d.Poly3DCollection at 0x20531baa5c0>

png

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

t = np.linspace(0, 2\*np.pi, 1000)
X = np.sin(t)
Y = np.cos(t)
Z = np.arange(t.size)[:, np.newaxis]

ax = plt.axes(projection="3d")
ax.plot_surface(X, Y, Z, cmap="viridis")

<mpl_toolkits.mplot3d.art3d.Poly3DCollection at 0x1c540cf1cc0>

png

13.2 Seaborn库-文艺青年的最爱

【1】Seaborn 与 Matplotlib

Seaborn 是一个基于 matplotlib 且数据结构与 pandas 统一的统计图制作库

x = np.linspace(0, 10, 500)
y = np.cumsum(np.random.randn(500, 6), axis=0)

with plt.style.context("classic"):
    plt.plot(x, y)
    plt.legend("ABCDEF", ncol=2, loc="upper left")   

png

import seaborn as sns

x = np.linspace(0, 10, 500)
y = np.cumsum(np.random.randn(500, 6), axis=0)
sns.set()# 改变了格式
plt.figure(figsize=(10, 6))
plt.plot(x, y)
plt.legend("ABCDEF", ncol=2, loc="upper left")

<matplotlib.legend.Legend at 0x20533d825f8>

png

【2】柱形图的对比

x = ['G1', 'G2', 'G3', 'G4', 'G5']
y = 2 \* np.arange(1, 6)

plt.figure(figsize=(8, 4))
plt.barh(x, y, align="center", height=0.5, alpha=0.8, color="blue")
plt.tick_params(axis="both", labelsize=13)

png

import seaborn as sns

plt.figure(figsize=(8, 4))
x = ['G5', 'G4', 'G3', 'G2', 'G1']
y = 2 \* np.arange(5, 0, -1)
#sns.barplot(y, x)
sns.barplot(y, x, linewidth=5)

<matplotlib.axes._subplots.AxesSubplot at 0x20533e92048>

png

sns.barplot?

【3】以鸢尾花数据集为例

iris = sns.load_dataset("iris")

iris.head()

sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2setosa
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa
sns.pairplot(data=iris, hue="species")

<seaborn.axisgrid.PairGrid at 0x205340655f8>

png

13.3 Pandas 中的绘图函数概览

import pandas as pd

【1】线形图

df = pd.DataFrame(np.random.randn(1000, 4).cumsum(axis=0),
                  columns=list("ABCD"),
                  index=np.arange(1000))
df.head()

ABCD
0-1.3114430.970917-1.635011-0.204779
1-1.6185020.810056-1.1192461.239689
2-3.5587871.431716-0.8162011.155611
3-5.377557-0.3127440.6509220.352176
4-3.9170451.1810971.5724060.965921
df.plot()

<matplotlib.axes._subplots.AxesSubplot at 0x20534763f28>

png

df = pd.DataFrame()
df.plot?

【2】柱形图

df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df2

abcd
00.5876000.0987360.4447570.877475
10.5800620.4515190.2123180.429673
20.4153070.7840830.8912050.756287
30.1900530.3509870.6625490.729193
40.4856020.1099740.8915540.473492
50.3318840.1289570.2043030.363420
60.9627500.4312260.9176820.972713
70.4834100.4865920.4392350.875210
80.0543370.9858120.4690160.894712
90.7309050.2371660.0431950.600445
  • 多组数据竖图
df2.plot.bar()

<matplotlib.axes._subplots.AxesSubplot at 0x20534f1cb00>

png

  • 多组数据累加竖图
df2.plot.bar(stacked=True) # 累加的柱形图

<matplotlib.axes._subplots.AxesSubplot at 0x20534f22208>

png

  • 多组数据累加横图
df2.plot.barh(stacked=True) # 变为barh

<matplotlib.axes._subplots.AxesSubplot at 0x2053509d048>

png

【3】直方图和密度图

df4 = pd.DataFrame({"A": np.random.randn(1000) - 3, "B": np.random.randn(1000),
                     "C": np.random.randn(1000) + 3})
df4.head()

ABC
0-4.2504241.0432681.356106
1-2.393362-0.8916203.787906
2-4.4112250.4363811.242749
3-3.465659-0.8459661.540347
4-3.6068501.6434043.689431
  • 普通直方图
df4.plot.hist(bins=50)

<matplotlib.axes._subplots.AxesSubplot at 0x20538383b38>

png

  • 累加直方图
df4['A'].plot.hist(cumulative=True)

<matplotlib.axes._subplots.AxesSubplot at 0x2053533bbe0>

png

  • 概率密度图
df4['A'].plot(kind="kde")

<matplotlib.axes._subplots.AxesSubplot at 0x205352c4e48>

png

  • 差分
df = pd.DataFrame(np.random.randn(1000, 4).cumsum(axis=0),
                  columns=list("ABCD"),
                  index=np.arange(1000))
df.head()

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matplotlib是一个流行的Python可视化,它可以用来绘制各种类型的图表,包括线图、散点图、柱状图、饼图等等。在本文中,我们将介绍如何使用Matplotlib绘制多个变量的图表。 首先,我们需要导入Matplotlib,并生成一些数据用于绘图。例如,我们可以使用NumPy生成一些随机数据: ```python import matplotlib.pyplot as plt import numpy as np # 生成数据 x = np.linspace(0, 10, 100) y1 = np.sin(x) y2 = np.cos(x) ``` 接下来,我们可以使用Matplotlib的plot函数绘制两个不同的线图: ```python # 绘制两个线图 plt.plot(x, y1, label='sin') plt.plot(x, y2, label='cos') # 添加图例 plt.legend() # 显示图表 plt.show() ``` 这将生成一个包含两个线图的图表,并在图例中显示每个线的标签。 如果我们想要绘制一个包含多个变量的图表,我们可以使用Matplotlib的subplot函数创建多个子图。例如,我们可以使用如下代码创建一个包含两个子图的图表: ```python # 创建包含两个子图的图表 fig, axs = plt.subplots(2) # 在第一个子图中绘制sin函数 axs[0].plot(x, y1) axs[0].set_title('sin') # 在第二个子图中绘制cos函数 axs[1].plot(x, y2) axs[1].set_title('cos') # 调整子图之间的间距 plt.tight_layout() # 显示图表 plt.show() ``` 这将生成一个包含两个子图的图表,每个子图都包含一个变量的图表。我们可以通过调整subplot函数的参数来创建包含更多子图的图表。 除了使用subplot函数,Matplotlib还提供了许多其他的绘图函数和工具,可以帮助我们创建各种类型的图表。例如,我们可以使用scatter函数创建散点图,使用bar函数创建柱状图,使用pie函数创建饼图等等。Matplotlib的文档中包含了详细的说明和示例,可以帮助我们学习如何使用这些功能来绘制各种类型的图表。 总之,Matplotlib是一个功能强大的Python可视化,可以帮助我们创建各种类型的图表。通过使用subplot函数和其他绘图函数,我们可以轻松地绘制包含多个变量的图表。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值