python用matplotlib画图

本文详细介绍了如何使用matplotlib进行图形绘制,包括使用pyplot模块创建图表,通过subplot()函数绘制子图,设置中文字体,坐标变换与注释,添加阴影和注释,绘制柱状图、散点图、图像,以及处理隐函数、箭头图、高亮显示和自定义轴等。同时,还提供了解决中文显示问题的方法。
摘要由CSDN通过智能技术生成

1.使用pyplot模块画图。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 1000)
y = np.sin(x)
z = np.cos(x**2)
plt.figure(figsize=(8, 5))
plt.plot(x, y, label="$sin(x)$", color="red", linewidth=2)
 #label可以使用内嵌Latex引擎,color可以用0到1范围内三个元素的元组表示(1.0,0.0,0.0)也表示红色,linwidth:指定曲线的宽度,可以不是整数,也可以缩写为1w.
plt.plot(x, z, "b--",label = "$cos(x^2)$")
plt.xlabel("Time(s)")
plt.ylabel("Volt")
'''
xlim()、ylim()分别表示x,y轴的显示范围
'''
plt.title("PyPlot First Example")
plt.legend()#显示图示,图中每条曲线的标签所在的矩形区域,loc参数可调整位置。
plt.savefig("c:\\figure1.png")

这里写图片描述
2.用subplot()绘制多个子图。

import matplotlib.pyplot as plt
plt.subplot(221) #分成2x2,占用第一个,即第一行第一列的子图
plt.subplot(222)#分成2x2,占用第二个,即第一行第二列的子图
plt.subplot(212)#分成2x1,占用第二个,即第二行
plt.show()

这里写图片描述

import matplotlib.pyplot as plt
for idx,color in enumerate('rgbyck'):
    plt.subplot(321+idx, axisbg=color)
plt.savefig("c:\\figure1.png")

这里写图片描述

3.显示中文字体:
首先获取配置文件的绝对路径;

from os import path
path.abspath(matplotlib.matplotlib_fname())

然后打开matplotlibrc文件,
修改如下:

font.family : Microsoft YaHei
font.sans-serif : Microsoft YaHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
修改的项去掉前面的#
最后重新导入配置文件:

import matplotlib
matplotlib.pyplot.rcdefaults() #matplotlib载入时从配置文件读入的配置
matplotlib.rcParams.update(matplotlib.rc_params()) #重新从配置文件载入最新的配置

另外也可以直接在程序中修改:
plt.rcParams[“font.family”]=”SimHei”
4.坐标变换和注释

# -*- coding: utf-8 -*-
__author__ = 'zzw'
import numpy as np
from matplotlib import pyplot as plt
def func1(x) :
    return 0.6*x+0.3
def func2 (x):
    return 0.4*x*x + 0.1 *x+0.2
def find_cure_intersects(x, y1, y2):  #计算两条曲线的交点
    d = y1-y2
    idx = np.where(d[:-1]*d[1:]<=0)[0]
    x1, x2 = x[idx], x[idx+1]
    d1, d2 = d[idx], d[idx+1]
    return -d1*(x2-x1)/(d2-d1) + x1
x = np.linspace(-3, 3, 100)
f1 = func1(x)
f2 = func2(x)
fig, ax = plt.subplots(figsize=(8,4))
ax.plot(x, f1)
ax.plot(x, f2)

x1, x2 = find_cure_intersects(x, f1, f2)

ax.plot(x1, func1(x1), "o")
ax.plot(x2, func1(x2), "o")
ax.fill_between(x, f1, f2, where=f1 > f2, facecolor="green", alpha=0.5)
from matplotlib import transforms
trans = transforms.blended_transform_factory(ax.transData, ax.transAxes)
ax.fill_between([x1, x2], 0, 1, transform=trans, alpha = 0.1)
a =ax.text(0.05, 0.95, u"直线和二次曲线的交点",
    transform=ax.transAxes,
    verticalalignment = "top",
    fontsize = 18,
    bbox={
  "facecolor":"red", "alpha":0.4, "pad":10})
arrow = {
  
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值