python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python绘图坐横坐标轴显示

python绘图坐横坐标轴显示方式

作者:wwwddd666

这篇文章主要介绍了python绘图坐横坐标轴显示方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python matplotlib绘图

使横坐标轴显示指定内容

在python 绘图的时候直接plot会出现横坐标轴显示为浮点数得情况。

举个栗子:

使用代码:

import matplotlib.pyplot as plt
y = [7.1,7.2,7.3,7.4,7.5]
x = list(range(0,5))#自动生成0,1,2,3,4这几个数,并添加到list中
plt.plot(x,y)
plt.show()

得到结果图如下:

可以看到途中我标出来的坐标轴使浮点数的形式。

解决方法:

只需要在plt.plot后面加上一句plt.xticks(),指明x轴的坐标使用那个列表内容作为表示即可。

下面举个例子,

例子中就以自然数0,1,2,3,4作为坐标,也可以替换成英文单词等等,替换成中文的话需要其他操作。这里留个接口,以后写中文怎么显示。

接上例子代码,改后代码为:

import matplotlib.pyplot as plt
y = [7.1,7.2,7.3,7.4,7.5]
x = list(range(0,5))#自动生成0,1,2,3,4这几个数,并添加到list中
plt.plot(x,y)
plt.xticks(x)#指明x轴坐标使用列表x里的内容
plt.show()

改后作图如下:

python画图,坐标轴问题

画坐标轴的时候出现了2个bug

第一个是y轴的大值在下面,小值在上面

这个bug的原因是y是str类型,而不是Int类型

解决办法是把y轴的每个值都变成int型

v = [int(m) for m in v]

python的数据类型要时刻注意,float, int, str之间一不小心就转换

第二个是y轴的刻度太难看了

解决:

y_major_locator = mticker.MultipleLocator(gap)
ax.yaxis.set_major_locator(y_major_locator)

效果:

完整代码:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'''
@author: funcups
'''
import math
from util import kernel, axis_x, axis_name
from json_util import json_paths_list
from jsonsearch import JsonSearch
import numpy as np
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as gridspec
import matplotlib.ticker as mticker
if __name__ == '__main__':
    latency_list = []
    Resource = {"DSP": [], "FF": [], "LUT": []}
    for json_path in json_paths_list:
        path = json_path
        fr = open(path, "r")
        json_data = fr.read()
        json_data = JsonSearch(object=json_data, mode='s')
        kernel_data = json_data.search_all_value(key=kernel)
        Latency = kernel_data[1]["Latency"]["LatencyBest"]
        DSP = kernel_data[1]["Area"]["DSP"]
        FF = kernel_data[1]["Area"]["FF"]
        LUT = kernel_data[1]["Area"]["LUT"]
        latency_list.append(Latency)
        Resource["DSP"].append(DSP)
        Resource["FF"].append(FF)
        Resource["LUT"].append(LUT)
    print(Resource)
    fig = plt.figure(tight_layout=True)
    gs = gridspec.GridSpec(2, 3)
    ax = fig.add_subplot(gs[0, :])
    latency_list = [int(m) for m in latency_list]
    yma = int(max(latency_list))
    ymi = int(min(latency_list))
    gap = int((yma - ymi) / 5)
    y_major_locator = mticker.MultipleLocator(gap)
    ax.yaxis.set_major_locator(y_major_locator)
    print("type(axis_x)", type(axis_x[0]))
    ax.set_ylabel("Latency")
    ax.set_xlabel(axis_name)
    ax.plot(axis_x, latency_list)
    for i, k, v in zip(list(range(len(Resource))), Resource.keys(), Resource.values()):
        ax = fig.add_subplot(gs[1, i])
        v = [int(m) for m in v]
        print(type(v[0]))
        ax.set_ylabel(k)
        ax.set_xlabel(axis_name)
        yma = int(max(v))
        ymi = int(min(v))
        gap = int((yma - ymi) / 5)
        y_major_locator = mticker.MultipleLocator(gap)
        ax.yaxis.set_major_locator(y_major_locator)
        ax.plot(axis_x, v)
    fig.align_labels()  # same as fig.align_xlabels(); fig.align_ylabels()
    plt.show()

总结

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

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