python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > matplotlib绘图时,坐标轴刻度不从X轴、y轴两端开始

Python3使用matplotlib绘图时,坐标轴刻度不从X轴、y轴两端开始

作者:想学代码的土木硕士

这篇文章主要介绍了Python3使用matplotlib绘图时,坐标轴刻度不从X轴、y轴两端开始问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

使用matplotlib绘图时,坐标轴刻度不从X轴、y轴两端开始

这样输出的图片真的不太好看,请问有什么方法可以避免吗?

(已经查询了百度,没有发现这各个问题的提问和解决方法)

import csv
from datetime import datetime
from matplotlib import pyplot as plt
#从文件中获取日期、气温
filename='death_valley_2014.csv'
with open(filename) as f:
    reader = csv.reader(f) 
    header_row = next(reader)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
    '''for index,column_header in enumerate(header_row):
        print(index,column_header)'''
    dates, highs, lows=[], [], []
    for row in reader:
        try:
            current_date=datetime.strptime(row[0],"%Y-%m-%d")
            high=int(row[1])
            low=int(row[3])
        except ValueError:
            print(current_date, 'missing data')
        else:
            dates.append(current_date)
            highs.append(high)
            lows.append(low)
# 根据数据绘制图形
fig = plt.figure(dpi=128, figsize= (10,6))
plt.plot(dates, highs, c='red')
plt.plot(dates, lows, c='blue')
plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)
# 设置图形的格式
plt.title("Daily high and low temperatures-2014", fontsize=24)
plt.xlabel('', fontsize=16)
fig.autofmt_xdate()
plt.ylabel('Temperatur(F)',fontsize = 16)
plt.tick_params(axis= 'both', which= 'major',labelsize= 16)
plt.show()                                                                                                                  

最后输出的结果如下,可以看到,无论是x轴还是y轴,刻度线均未从轴起始端开始出现,也不在轴末端出现。

matplotlib添加坐标轴刻度时的一个常见问题

问题描述

python初学者学习使用matplotlib作图时,可能会遇到添加坐标轴不起作用的情况,这时有可能是因为代码段顺序出了问题。

 我们来看下面一段代码,

import matplotlib.pyplot as plt
import random
# 数据生成
x = range(50)
y = [random.uniform(15, 30) for i in x]
# 画布生成
plt.figure(figsize=(20, 8), dpi=80)
# 坐标轴添加
y_ticks = range(30)
plt.yticks(y_ticks[::5])   # y轴从0到30,间隔为5
# 图形绘制
plt.plot(x, y)
# 图形显示
plt.show()

生成图形如下,

我们发现,纵轴(y轴) 并不是我们设定的从0到30,间隔为5

解决方法

我们将【添加坐标轴】段的代码移到【图形绘制】段代码之后,

import matplotlib.pyplot as plt
import random
# 数据生成
x = range(50)
y = [random.uniform(15, 30) for i in x]
# 画布生成
plt.figure(figsize=(20, 8), dpi=80)
# 图形绘制
plt.plot(x, y)
# 坐标轴添加
y_ticks = range(30)
plt.yticks(y_ticks[::5])
# 图形显示
plt.show()

重新生成图形如下,

这时坐标轴设置就起作用了。

注意:

综上,使用matplotlib绘图时,坐标轴的设置需要放到图形绘制之后。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文