значения y, не соответствующие правильным значениям x на графике боке - PullRequest
0 голосов
/ 25 июня 2019

У меня есть пандас, который выглядит как показано ниже.Цель состоит в том, чтобы сгенерировать несколько (в данном случае 12) диаграмм разброса xy на одном холсте, сохраняя общий код для любого количества столбцов «y», но всегда с тем же столбцом «x_values» (крайний правый столбец в кадре данных ниже).

      y1           y2          y3        y4           y5          y6         y7          y8         y9         y10          y11         y12      x_values
0   1.975284    1.975200    1.975200    1.974999    1.975202    1.975202    1.975202    1.975202    1.975202    1.975202    1.975202    1.975202    0
1   1.975202    1.975202    1.975202    1.975202    1.975299    1.975247    1.975156    1.975156    1.975319    1.975276    1.975277    1.964492    0.05
2   1.975447    1.975187    1.975187    1.974587    1.975394    1.975301    1.975020    1.975020    1.975455    1.975448    1.975448    1.951889    0.10
3   1.975361    1.975197    1.975197    1.974781    1.975487    1.975342    1.974792    1.974792    1.975544    1.975608    1.975608    1.957457    0.15
4   1.975284    1.975200    1.975200    1.975413    1.975299    1.975247    1.975156    1.975156    1.975042    1.975277    1.975277    1.981666    -0.05
5   1.975447    1.975187    1.975187    1.975827    1.975394    1.975301    1.975020    1.975020    1.974911    1.975448    1.975448    1.986136    -0.10
6   1.975361    1.975197    1.975197    1.975636    1.975488    1.975342    1.974792    1.974793    1.974630    1.975609    1.975608    1.989482    -0.15

Код, который я использую, показан ниже:

import pandas as pd 
import numpy as np 
import bokeh.io 
import bokeh.models 
import bokeh.plotting
bokeh.io.output_notebook()

df = pd.read_csv('/Users/rubenm/Desktop/VOnewset/27042019_freqs/plotter_script/ofile.txt', sep = ',', header = None, skiprows = 3)

cols_int_list=list(range(1,len(df.columns) + 1))
newcols = ['y' + str(k) for k in cols_int_list]
df.columns = newcols
x_vals = ['0','0.05','0.10','0.15','-0.05','-0.10','-0.15']
df['x_values']= x_vals      

colors = ['deepskyblue','dodgerblue','blue','navy','limegreen','green','darkgreen','tomato','orange','deeppink','magenta','purple','peru','saddlebrown','plum']
source = ColumnDataSource(df)
p = figure(plot_height=500)
i = 0
for name in df.columns:
    if not name.startswith('y'): continue
    print(name)
    p.scatter('x_values', name, source=source, fill_color=colors[i], legend=name)
    i += 1
p.legend.location = 'top_left'
p.legend.click_policy = 'hide'
show(p)

Возвращает график, похожий на приведенный ниже.Как будто каждое значение x равно нулю, а не соответствует правильному элементу y, а легенда не отображает имена y (n), как ожидалось.
plot output

1 Ответ

0 голосов
/ 25 июня 2019

Проблема, которую я вижу, заключается в том, что вы изображаете каждое значение как значение y вместо любого значения x в данных. Я бы попытался явно назвать значения x как x_vals или df [x_values], но вам даже не нужно присваивать это df

data= {'x': 'x_vals', 'y': df }
source = ColumnDataSource(data)
...