Plotly for python,只绘制了第一个数据点

时间:2016-02-14 00:07:10

标签: python matplotlib plotly

我是个新手,并且正在编写脚本以根据从数据库中提取的某些结果生成图表。但是,当我将数据发送到plotly时,只绘制了三条轨迹中每条轨迹的第一个数据点。我已经验证了列表包含正确的数据,我甚至只是粘贴列表而不是动态创建变量。不幸的是,每次只绘制第一个数据点。有谁知道我在这里缺少什么?如果需要,我也会对另一个图书馆开放。

是否也可以将x轴显示为字符串?

import plotly.plotly as py
import plotly.graph_objs as go
# Custom database class, works fine.
from classes.database import DatabaseConnection

# Database Connections and instances
db_instance = DatabaseConnection()
db_conn = db_instance.conn
db_cur = db_instance.cur



def main():


    # Get a list of versions and their stats.
    db_cur.execute(
        """
        select row_to_json(x) from
        (SELECT
               versions.version_number,
               cast(AVG(results.average) as double precision) as average,
               cast(AVG(results.minimum) as double precision) as minimum,
               cast(AVG(results.maximum) as double precision) as maximum
                  FROM versions,results
                    WHERE
                      versions.version_number = results.version_number
                      GROUP BY
                        versions.version_number) x;
                """
    )

    versions = []
    average = []
    minimum = []
    maximum = []

    unclean = db_cur.fetchall()

    # Create lists for x and y coordinates.
    for row in unclean:
        versions.append(row[0]['version_number'])
        average.append(int(row[0]['average']))
        minimum.append(int(row[0]['minimum']))
        maximum.append(int(row[0]['maximum']))

    grph_average = go.Scatter(
        x=versions,
        y=average,
        name = 'Average',
        mode='lines',
    )

    grph_minimum = go.Scatter(
        x=versions,
        y=minimum,
        name = 'Minimum',
        mode='lines',
    )

    grph_maximum = go.Scatter(
        x=versions,
        y=maximum,
        name = 'Maximum',
        mode='lines',
    )


    data = go.Data([grph_average, grph_minimum, grph_maximum])
    # Edit the layout
    layout = dict(title = 'Responses',
              xaxis = dict(title = 'Versions'),
              yaxis = dict(title = 'Ms'),
              )

    fig = dict(data=data, layout=layout)
    py.plot(fig, filename='response-times', auto_open=False)


if __name__ == '__main__':
    main()

如果要插入值,则查询返回的数据如下:

versions = ['6.1', '5.0', '5.2'] 
average = [11232, 29391, 10429] 
minimum = [3641, 7729, 3483] 
maximum = [57440, 62535, 45201]

2 个答案:

答案 0 :(得分:0)

以下是一些matplotlib可能会让您开始:

import matplotlib.pyplot as plt

versions = ['6.1', '5.0', '5.2'] 
average = [11232, 29391, 10429] 
minimum = [3641, 7729, 3483] 
maximum = [57440, 62535, 45201]

plt.plot(minimum)
plt.plot(average)
plt.plot(maximum)
plt.xticks(range(len(versions)), versions)

答案 1 :(得分:0)

看起来这是我的x轴问题。通过在版本号之前添加一些文本并特别输入到字符串,我能够正确生成图形。

# Create lists for x and y coordinates.
for row in unclean:
    versions.append("Version: " + str(row[0]['version_number']))
    average.append(int(row[0]['average']))
    minimum.append(int(row[0]['minimum']))
    maximum.append(int(row[0]['maximum']))