如何在同一张图上将多个列表绘制为一条线?

时间:2019-11-05 16:26:34

标签: python numpy csv matplotlib data-visualization

我想创建一个图,该图将显示与特定地质“蛋糕”层有关的某些参数的可变性。我有一个配置文件,其中指定了每个表面的顶部和底部深度以及每个图层的某些物理参数的值。顶部和底部采用间隔形式(例如[0-5、2],[5-7、1.8]等)。 我想将一张具有完整轮廓的图作为一条连续线。 数据以csv格式存储为表,其列的名称如下: |顶部| |底部| | VALUE |

我创建了带有数字的列表,以用图表所需的数据填充间隔。现在我卡住了,我不知道如何链接线以创建一个连续的轮廓。 我尝试过的代码已经看起来像这样:

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

with open('data.csv', newline='') as file:
    file = csv.reader(file, delimiter=';', quotechar='|')
    headers = next(file)
    table = list(file) 
    result = []
    for line in table:
        top = float(line[0])
        bottom = float(line[1])
        value = float(line[2])
        l = np.arange(top, bottom+1, 1)
        Z = [value]*len(l)

        ax.plot(Z, l)
        ax = plt.axes()
    #ax.set_ylim([55,-1])
    #ax.set_xlim([1,3])
    plt.show()

我的结果显示在图1中,但是我想获得类似于图2的内容: https://imgur.com/a/RHtvfQL

我正在使用Spyder 3.6。

是否可以从不同的列表创建一条连续的线? 我不喜欢这个解决方案。谢谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

您可以使用hlines(构成一些虚假数据,看起来与您的数据相似)在竖线之间绘制水平线:

import numpy as np
from matplotlib import pyplot

random_data = [5, 8, 17, 25, 32, 50]
values = [1.5, 2.3, 1.7, 2.5, 1.8, 1.8]  # Note last value should be duplicate

for i in range(len(random_data) - 1):
        top = float(random_data[i])
        bottom = float(random_data[i + 1])
        value = float(values[i])
        value_next = float(values[i + 1])

        l = np.arange(top, bottom + 1, 1)
        Z = [value]*len(l)

        pyplot.plot(Z, l)
        pyplot.hlines(bottom, value, value_next)

pyplot.show()

enter image description here

请注意,您还可以使用vlines更轻松地绘制垂直线:

import numpy as np
from matplotlib import pyplot

random_data = [5, 8, 17, 25, 32, 50]
values = [1.5, 2.3, 1.7, 2.5, 1.8, 1.8]  # Note last value should be duplicate

for i in range(len(random_data) - 1):
        top = float(random_data[i])
        bottom = float(random_data[i + 1])
        value = float(values[i])
        value_next = float(values[i + 1])

        pyplot.vlines(value, top, bottom)
        pyplot.hlines(bottom, value, value_next)

pyplot.show()

enter image description here

您可能需要处理数据限制,但这将为您提供所需的内容。