离线绘图:生成(y 轴)2 列和(x 轴)1 列的条形图
Offline Plotly: Generate bar chart of 2 columns on (y axis) & 1 column on ( x axis)
我喜欢从我使用 Plotly 的 big.tsv 文件生成 3 列(CLASS、POSITION、SCORE)的离线条形图。
我正在寻找可以绘制所有 类 及其各自值的代码。
For Example: Class 1 have score 385.45 and 424.66 at position 5935161
and 5935162 respectively.
示例数据如下:
CLASS POSITION SCORE
1 5935162 385.45
1 5937168 424.66
2 5939544 1302.35
2 5948677 1501.93
3 153278829 1466.27
3 153284192 988.13
3 153284483 1432.21
4 153278829 1466.27
4 153284192 988.13
4 153284483 1432.21
5 153278829 1466.27
5 153284192 988.13
6 153284483 1432.21
6 153278829 1466.27
7 153284192 988.13
8 153284483 1432.21
8 153278829 1466.27
8 153284192 988.13
9 153284483 1432.21
10 153278829 1466.27
11 153284192 988.13
11 153284483 1432.21
12 153278829 1466.27
12 153284192 988.13
13 153284483 1432.21
A 153633359 617.39
A 153689893 1808.94
B 153880830 2507.65
B 153881525 2354.97
我想在 X 轴上绘制第 1 列,在 Y 轴上绘制第 2 列和第 3 列,但无法为其编写代码。但是我在教程的帮助下成功地编写了一个代码,该代码正在绘制第 1 列和第 3 列,但它没有打印所有行(G 和 F):
import pandas as pd
import plotly.express as px
df = pd.read_csv('DATA.txt',"\t")
fig = px.bar(df, x = 'CLASS', y = 'SCORE')
fig.show()
生成的代码如下图:
[条形图不代表 G & F 的值][]1
如果有人能帮我解决上面的问题就好了。
建议的代码生成以下 x 轴顺序不正确的图表
不确定您想要实现什么,但是将位置和分数放在同一个轴上,这听起来不是个好主意,因为位置可能比分数大 200.000 倍以上。
分组条形图
这里我只为每个 class 设置取一个值 df=df.groupby("CLASS").first().reset_index()
。显示所有 classes 的技巧是使用 df.index
作为 x,然后在布局上更改 ticktext
。
import pandas as pd
import plotly.graph_objs as go
fig = go.Figure()
fig.add_trace(go.Bar(x=df.index,
y=df["POSITION"],
name="Position"))
fig.add_trace(go.Bar(x=df.index,
y=df["SCORE"],
name="Score"))
fig.update_layout(
xaxis = dict(
tickmode = 'array',
tickvals = df.index,
ticktext = df["CLASS"])
)
支线
这里大致相同,但使用了两个子图。
import pandas as pd
from plotly.subplots import make_subplots
import plotly.graph_objs as go
fig = make_subplots(rows=1, cols=2,
subplot_titles=["Position",
"Score"]
)
fig.add_trace(go.Bar(x=df.index,
y=df["POSITION"],
name="Position"),
row=1, col=1)
fig.add_trace(go.Bar(x=df.index,
y=df["SCORE"],
name="Score"),
row=1, col=2)
fig['layout']['xaxis1'].update(dict(
tickmode = 'array',
tickvals = df.index,
ticktext = df["CLASS"]))
fig['layout']['xaxis2'].update(dict(
tickmode = 'array',
tickvals = df.index,
ticktext = df["CLASS"]))
fig.show()
更新
鉴于您最近添加的数据,您可以尝试使用占位符在绘图前对您的 df
进行排序。
df = df.groupby("CLASS")["SCORE"].first().reset_index()
def fun(x):
try:
return str(int(x)).zfill(2)
except:
return x
df["ph"] = df["CLASS"].apply(fun)
df = df.sort_values("ph").reset_index(drop=True)
fig = go.Figure()
fig.add_trace(go.Bar(x=df.index,
y=df["SCORE"],
name="Score"))
fig.update_layout(
xaxis = dict(
tickmode = 'array',
tickvals = df.index,
ticktext = df["CLASS"])
)
我喜欢从我使用 Plotly 的 big.tsv 文件生成 3 列(CLASS、POSITION、SCORE)的离线条形图。
我正在寻找可以绘制所有 类 及其各自值的代码。
For Example: Class 1 have score 385.45 and 424.66 at position 5935161 and 5935162 respectively.
示例数据如下:
CLASS POSITION SCORE
1 5935162 385.45
1 5937168 424.66
2 5939544 1302.35
2 5948677 1501.93
3 153278829 1466.27
3 153284192 988.13
3 153284483 1432.21
4 153278829 1466.27
4 153284192 988.13
4 153284483 1432.21
5 153278829 1466.27
5 153284192 988.13
6 153284483 1432.21
6 153278829 1466.27
7 153284192 988.13
8 153284483 1432.21
8 153278829 1466.27
8 153284192 988.13
9 153284483 1432.21
10 153278829 1466.27
11 153284192 988.13
11 153284483 1432.21
12 153278829 1466.27
12 153284192 988.13
13 153284483 1432.21
A 153633359 617.39
A 153689893 1808.94
B 153880830 2507.65
B 153881525 2354.97
我想在 X 轴上绘制第 1 列,在 Y 轴上绘制第 2 列和第 3 列,但无法为其编写代码。但是我在教程的帮助下成功地编写了一个代码,该代码正在绘制第 1 列和第 3 列,但它没有打印所有行(G 和 F):
import pandas as pd
import plotly.express as px
df = pd.read_csv('DATA.txt',"\t")
fig = px.bar(df, x = 'CLASS', y = 'SCORE')
fig.show()
生成的代码如下图:
[条形图不代表 G & F 的值][
如果有人能帮我解决上面的问题就好了。
建议的代码生成以下 x 轴顺序不正确的图表
不确定您想要实现什么,但是将位置和分数放在同一个轴上,这听起来不是个好主意,因为位置可能比分数大 200.000 倍以上。
分组条形图
这里我只为每个 class 设置取一个值 df=df.groupby("CLASS").first().reset_index()
。显示所有 classes 的技巧是使用 df.index
作为 x,然后在布局上更改 ticktext
。
import pandas as pd
import plotly.graph_objs as go
fig = go.Figure()
fig.add_trace(go.Bar(x=df.index,
y=df["POSITION"],
name="Position"))
fig.add_trace(go.Bar(x=df.index,
y=df["SCORE"],
name="Score"))
fig.update_layout(
xaxis = dict(
tickmode = 'array',
tickvals = df.index,
ticktext = df["CLASS"])
)
支线
这里大致相同,但使用了两个子图。
import pandas as pd
from plotly.subplots import make_subplots
import plotly.graph_objs as go
fig = make_subplots(rows=1, cols=2,
subplot_titles=["Position",
"Score"]
)
fig.add_trace(go.Bar(x=df.index,
y=df["POSITION"],
name="Position"),
row=1, col=1)
fig.add_trace(go.Bar(x=df.index,
y=df["SCORE"],
name="Score"),
row=1, col=2)
fig['layout']['xaxis1'].update(dict(
tickmode = 'array',
tickvals = df.index,
ticktext = df["CLASS"]))
fig['layout']['xaxis2'].update(dict(
tickmode = 'array',
tickvals = df.index,
ticktext = df["CLASS"]))
fig.show()
更新
鉴于您最近添加的数据,您可以尝试使用占位符在绘图前对您的 df
进行排序。
df = df.groupby("CLASS")["SCORE"].first().reset_index()
def fun(x):
try:
return str(int(x)).zfill(2)
except:
return x
df["ph"] = df["CLASS"].apply(fun)
df = df.sort_values("ph").reset_index(drop=True)
fig = go.Figure()
fig.add_trace(go.Bar(x=df.index,
y=df["SCORE"],
name="Score"))
fig.update_layout(
xaxis = dict(
tickmode = 'array',
tickvals = df.index,
ticktext = df["CLASS"])
)