【问题标题】:gridspec without using ":" in Parameter?在参数中不使用“:”的gridspec?
【发布时间】:2019-03-21 21:32:09
【问题描述】:

我的问题很简单:我不能在最后一个参数中添加“:” 图(strecke,strecke2,“Strecke in Metern/s”,“S(t) Diagramm”,0,:) 因为它告诉我:在“str”和“int”的实例之间不支持“

文件链接:https://filehorst.de/download.php?file=ceCnteJq

import codecs
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches # wird nicht benutzt, test
import numpy as np
import matplotlib.gridspec as grid

zeit = []
strecke = []
geschwindigkeit = []
beschleunigung = []
strecke2 = []
geschwindigkeit2 = []
beschleunigung2 = []


gs = grid.GridSpec(2, 2)
fig = plt.figure('Diagramme', tight_layout=True)

daten = open("BewegungBeschleunigung.csv")

reiheÜberspringen = True

for i in daten:

    if reiheÜberspringen == True:
        reiheÜberspringen = False
        continue

    i = i.strip().split(",")

    zeit.append(float(i[0]))
    strecke.append(float(i[1]))
    geschwindigkeit.append(float(i[2]))
    beschleunigung.append(float(i[3]))
    strecke2.append(float(i[4]))
    geschwindigkeit2.append(float(i[5]))
    beschleunigung2.append(float(i[6]))

def diagram(y, y2, yachse, titel, pos1, pos2):

    ax = fig.add_subplot(gs[pos1, pos2])
    ax.plot(zeit, y, "go", markersize = 2.5)
    ax.plot(zeit, y2, "ro", markersize = 2.5)
    ax.autoscale(enable = False, axis = "both", tight = None)
    ax.grid(True)
    ax.set_title(titel)

    plt.gcf().canvas.set_window_title("Diagramme")


diagram(strecke, strecke2, "Strecke in Metern/s", "S(t) Diagramm", 0, :)
diagram(geschwindigkeit, geschwindigkeit2, "Geschwindigkeit in Metern/s", "V(t) Diagramm", 1, 0)
diagram(beschleunigung, beschleunigung2, "Beschleunigung in Metern/s^2", "a(t) Diagramm", 1, 1 )
plt.show()



daten.close

【问题讨论】:

  • 这里我只能重复my comment:使用numpy.loadtxt来加载你的数据。
  • 另外,以后请不要使用指向数据主机的链接。此处使用的实际数据完全与问题无关。见minimal reproducible example

标签: python python-3.x matplotlib codec


【解决方案1】:

你可以在你的函数中放置一个if 条件。您可以将pos2 的默认值设为None。因此,如果您想要:,则在调用diagram 时不要传递任何值。然后检查函数内部是否为pos2 传递了任何值。如果没有,那么您使用: 否则您使用传递的值。

下面是修改后的函数。我没有你的数据,但它会工作。


def diagram(y, y2, yachse, titel, pos1, pos2=None):
    if not pos2:
        ax = fig.add_subplot(gs[pos1, :])
    else:    
        ax = fig.add_subplot(gs[pos1, pos2])
    ax.plot(zeit, y, "go", markersize = 2.5)
    ax.plot(zeit, y2, "ro", markersize = 2.5)
    ax.autoscale(enable = False, axis = "both", tight = None)
    ax.grid(True)
    ax.set_title(titel)

    plt.gcf().canvas.set_window_title("Diagramme")


diagram(strecke, strecke2, "Strecke in Metern/s", "S(t) Diagramm", 0) # <-- No pos2
diagram(geschwindigkeit, geschwindigkeit2, "Geschwindigkeit in Metern/s", "V(t) Diagramm", 1, 0)
diagram(beschleunigung, beschleunigung2, "Beschleunigung in Metern/s^2", "a(t) Diagramm", 1, 1 )
plt.show()

【讨论】:

  • 好的,谢谢,但它还有另一个问题。正如您在此屏幕截图中看到的那样:prntscr.com/n170hh 如果我这样做,V(t) 图(第二个)太大并且超过了 a(t) 图(第三个)
  • @BoroFel:什么问题?
  • sry 快速回车,编辑有问题的评论
  • @BoroFel:您可以尝试在plt.show() 之前添加plt.tight_layout() 吗?
  • 它没有任何改变^^
【解决方案2】:

Numpy 提供了一种通过numpy.s_ 生成索引表达式的方法。你可以把它当作

np.s_[:]

将完整的切片传递给函数。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

gs = gridspec.GridSpec(2, 2)
fig = plt.figure('Diagramme', tight_layout=True)

data = np.loadtxt("data/BewegungBeschleunigung.csv", skiprows=1, delimiter=",", unpack=True)
(zeit, strecke, geschwindigkeit, beschleunigung, 
 strecke2, geschwindigkeit2, beschleunigung2) = data


def diagram(y, y2, yachse, titel, pos1, pos2):

    ax = fig.add_subplot(gs[pos1, pos2])
    ax.plot(zeit, y, "go", markersize = 2.5)
    ax.plot(zeit, y2, "ro", markersize = 2.5)
    ax.autoscale(enable = False, axis = "both", tight = None)
    ax.grid(True)
    ax.set_title(titel)

    plt.gcf().canvas.set_window_title("Diagramme")


diagram(strecke, strecke2, "Strecke", "S(t) Diagramm", 0, np.s_[:])
diagram(geschwindigkeit, geschwindigkeit2, "Geschwindigkeit", "V(t) Diagramm", 1, 0)
diagram(beschleunigung, beschleunigung2, "Beschleunigung", "a(t) Diagramm", 1, 1 )
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多