当前位置: 首页 > 面试题库 >

无法使较小的网格线出现在matplotlib图中

和选
2023-03-14
问题内容

好的,所以我有下面的代码,用于实时图形化显示通过串行接收的嵌入式设备中的某些数据。它并不是要成为生产工具,而是内部eng工具,因此并不是十分友好。问题是,无论我做什么,即使此处设置为,我也无法显示较小的网格线True, which=both。我可以对主要的网格线做任何我想做的事情,但是未成年人不会出现。有任何想法吗?这是代码:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
import serial

SERIAL_PORT_NUM=9

...a bunch of constants...
#windows starts serial port numbers at 1, python starts at 0
SERIAL_PORT_NUM = SERIAL_PORT_NUM - 1
"""
Open the serial port
"""
ser =serial.Serial(port=SERIAL_PORT_NUM,baudrate=115200,bytesize=8,parity='N',stopbits=1,timeout=None,xonxoff=0,rtscts=0)

# First set up the figure, the axis, and the plot element we want to animate
raw_adc_fig = plt.figure()
raw_adc_ax = plt.axes(xlim=(0, 200), ylim=(0, 2047))
raw_adc_ax.grid(True, which='both')
raw_adc_fig.suptitle("Raw ADC data")
plt.ylabel("ADC values (hex)")
plt.xlabel("time (sec)")
raw_adc_line, = raw_adc_ax.plot([], [], lw=2)

def read_serial(serial_port):
    tmp = ''
    same_line = True
    while same_line:
        tmp += serial_port.read(1)
        if tmp != '':
            if tmp[-1] == '*':
                same_line = False
    tmp = tmp.rstrip()
    tmp = tmp.lstrip()
    return tmp

def process_serial(input_data):
    output_data = 0
    intermediate_data = input_data[A_TYPE_START_POS:A_TYPE_STOP_POS + 1]
    if( intermediate_data != ''):
        output_data =  int(intermediate_data , 16 )
    else:
        print "bad data"
        output_data = -100

    return output_data

def get_sound_value(serial_port):
    cur_line = ''

    get_next_line = True
    # read in the next line until a sound packet of type A is found
    while( get_next_line ):
        cur_line = read_serial(serial_port)
        if( (cur_line != '') and (cur_line[0:3] == ROUTER_SOUND_DATA) and (len(cur_line) == D_TYPE_STOP_POS + 2) ):
          get_next_line = False

    sound_value = process_serial(cur_line)
    return sound_value

# initialization function: plot the background of each frame
def raw_adc_init():
    raw_adc_line.set_data([], [])
    return raw_adc_line,

# animation function.  This is called sequentially
def raw_adc_animate(i):
    sound_data_list.append( get_sound_value(ser) )
    y = sound_data_list
    if( len(y) == 190 ):
        del y[0]
    x = np.linspace(0, len(y), len(y))
    raw_adc_line.set_data(x, y)
    return raw_adc_line,

# call the animator.  blit=True means only re-draw the parts that have changed.
raw_adc_anim = animation.FuncAnimation(raw_adc_fig, raw_adc_animate, init_func=raw_adc_init, frames=200, interval=1000, blit=True)

编辑:修复了打开串行端口的错误。更改timeout=0timeout=None


问题答案:

不幸的是,ax.grid这方面有点令人困惑。(这是一个设计错误/常见问题。)它打开了次要网格,但是次要刻度仍然关闭。

您需要做的就是打电话,plt.minorticks_on或者ax.minorticks_on除了打电话ax.grid(True, which='both')



 类似资料:
  • 本文向大家介绍matplotlib 使用子图的子图网格,包括了matplotlib 使用子图的子图网格的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 在Matplotlib中,我按如下所示制作虚线网格: 但是,我无法找出如何(甚至可能)在其他图形元素(如条形图)后面绘制网格线。更改添加网格的顺序与添加其他元素的顺序没有区别。 是否有可能使网格线出现在其他所有内容的后面? 问题答案: 据此-http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder- td5346.

  • 问题内容: 我正在尝试为一些数据生成热图,我的代码如下所示: 它生成图像 我也想在网格内显示值。有什么办法吗? 问题答案: 当然,只需执行以下操作: 但是,标签很难看到,因此您可能需要在它们周围放置一个框: 另外,在许多情况下,这样做更为有用。它在放置文本方面更加灵活,但也更加复杂。在这里看看示例:http : //matplotlib.org/users/annotations_guide.ht

  • 下面是我的代码,我正在使用它来传递浏览器、节点和枢纽港来启动浏览器并执行测试,但是我得到了异常,尽管我能够设置selenium服务器。我把错误贴在代码下面。我使用mac book、Selenium3.4、Firefox55和Gecko0.18.0 下面是命令提示符中的日志

  • 我正在使用 iText版本5.3.3。Java jdk 1.6.0 我正在开发一个报表软件,用户可以定制带有1点黑色边框的JTable单元格,显示在JTable上,如下所示:- ColumnalignmentRenderer.java ZoneBorder.java 更新1 但当行较多时,它会在行之间的某些地方显示空白行,如下所示:- 为此,我使用以下代码将数据增加到9行:- 请对此提出一些建议。

  • 主要内容:绘制单条折线,绘制多条折线图折线图(line chart)是我们日常工作、学习中经常使用的一种图表,它可以直观的反映数据的变化趋势。与绘制柱状图、饼状图等图形不同,Matplotlib 并没有直接提供绘制折线图的函数,因此本节着重讲解如何绘制一幅折线图。 绘制单条折线 下面示例是关于 小牛知识库用户活跃度的折线图: 显示结果如下: 绘制多条折线图 当学习完如何绘制单条折线的绘制后,再绘制多条折线也变的容易,只要准备好绘制多条