【问题标题】:Matplotlib plots no line plots; crosses, circles and triangles workMatplotlib 不绘制线图;十字架,圆圈和三角形的工作
【发布时间】:2017-05-30 18:11:14
【问题描述】:

我正在尝试使用 Matplotlib 绘制一些测量数据。 使用下面显示的代码,我得到了绘图窗口和 gui,但没有绘制绘图。如果我将绘图类型更改为圆形或十字形,它就可以了。

# coding=utf-8
import matplotlib.pyplot as plt
import csv

with open("AgPVP8.2.171g1L#2.csv") as csvfile:
    reader = csv.reader(csvfile, delimiter=",")

    frequencies = []
    phases = []

    for row in reader:
        frequency = float(row[0])
        phase = float(row[4])

        frequencies.append(frequency)
        phases.append(phase)

plt.plot([frequencies], [phases], "b-")
plt.xscale("log")
plt.show()

【问题讨论】:

  • 为什么你用[],如果你用plt.plot(frequencies, phases, "b-")它不起作用?

标签: python matplotlib plot


【解决方案1】:

问题是频率和相位只存在于with open(...的范围内,必须放在这个范围内:

import matplotlib.pyplot as plt
import csv

with open("AgPVP8.2.171g1L#2.csv") as csvfile:
    reader = csv.reader(csvfile, delimiter=",")

    frequencies = []
    phases = []

    for row in reader:
        frequency = float(row[0])
        phase = float(row[4])

        frequencies.append(frequency)
        phases.append(phase)
    plt.plot(frequencies, phases, "-b")
    plt.xscale("log")
    plt.show()

【讨论】:

  • csvfile 仅存在于 with 上下文中。所有其他变量在这里都是全局的。因此,在上下文之外进行绘图完全没有问题 - 我认为甚至应该这样做,以便在显示绘图之前关闭文件。
【解决方案2】:

plt.plot(x,y) 要求 xy 是列表(或一般序列)或数组。 在这里,您尝试绘制列表的列表,即[x]x 不同。 因此,在您的代码中,您需要将 plt.plot([frequencies], [phases], "b-") 替换为

plt.plot(frequencies, phases, "-b")

完整的代码应该如下所示:

import matplotlib.pyplot as plt
import csv

with open("AgPVP8.2.171g1L#2.csv") as csvfile:
    reader = csv.reader(csvfile, delimiter=",")

    frequencies = []
    phases = []

    for row in reader:
        frequency = float(row[0])
        phase = float(row[4])

        frequencies.append(frequency)
        phases.append(phase)

plt.plot(frequencies, phases, "b-")
plt.xscale("log")
plt.show()

我建议看看numpy.loadtxtnumpy.genfromtxt。两者都会更容易在 csv 文件中读取,例如在这种情况下

import matplotlib.pyplot as plt
import numpy as np

frequencies, phases = np.loadtxt("AgPVP8.2.171g1L#2.csv", unpack=True, usecols = (0,4), delimiter=",")

plt.plot(frequencies, phases, "b-")
plt.xscale("log")
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多