Python 如何在同一图形上绘制多个列表作为一行?

Python 如何在同一图形上绘制多个列表作为一行?,python,numpy,csv,matplotlib,data-visualization,Python,Numpy,Csv,Matplotlib,Data Visualization,我想创建一个图,显示与特定地质“蛋糕”层有关的某些参数的可变性。我有一个剖面,每个表面的顶部和底部深度以及每个层的一些物理参数值。顶部和底部以间隔的形式出现(例如[0-5,2];[5-7,1.8];等等)。 我想有一个完整的轮廓图作为一个连续的线。 数据以csv格式存储为表,列名称如下: |顶部| |底部| |值| 我创建了带有数字的列表,用图表所需的数据填充间隔。现在我陷入困境,我不知道如何链接线来创建一个连续的配置文件。 我已经尝试过的代码如下所示: import numpy as np i

我想创建一个图,显示与特定地质“蛋糕”层有关的某些参数的可变性。我有一个剖面,每个表面的顶部和底部深度以及每个层的一些物理参数值。顶部和底部以间隔的形式出现(例如[0-5,2];[5-7,1.8];等等)。 我想有一个完整的轮廓图作为一个连续的线。 数据以csv格式存储为表,列名称如下: |顶部| |底部| |值|

我创建了带有数字的列表,用图表所需的数据填充间隔。现在我陷入困境,我不知道如何链接线来创建一个连续的配置文件。 我已经尝试过的代码如下所示:

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的结果:

我用的是Spyder 3.6

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

您可以使用
hlines
在垂直条之间绘制水平线(编造了一些与您的数据相似的假数据):

请注意,您还可以使用
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()


您可能需要处理数据限制,但这将提供您想要的。

而且我还发现脚本并没有开始从第一个间隔/层绘制线……只是检查我是否理解正确:您希望图1中的垂直线与水平线链接在一起?@Francisca yes,这正是我想要的。设置数据限制后,它工作得非常好!非常感谢你!
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()