总体目标:使用 ggplot 有选择地仅标记最后一个点高于某个 y 值的线。
潜在的函数/包:我知道geom_text()函数和 directlabels 包,但我无法在他们的文档中找到一种方法来按照我上面描述的方式选择性地标记行。
样本数据
ID <- c(rep("ID1", 5), rep("ID2", 5), rep("ID3", 5), rep("ID4", 5), rep("ID5", 5))
Y <- c(1, 2, 3, 4, 5,
10, 20, 30, 40, 1,
5, 10, 15, 10, 60,
50, 30, 20, 25, 10,
20, 25, 30, 35, 50)
Year <- c(rep(seq(2000 ,2004), 5))
DATA <- data.frame(ID, Year, Y)
Run Code Online (Sandbox Code Playgroud)
绘制数据
ggplot(data=DATA, aes(Year, Y)) +
geom_line(aes(y=Y, x=Year, color=ID)) +
theme_bw()
Run Code Online (Sandbox Code Playgroud)
阴谋

问题
在上图的情况下,有没有办法使用、 directlabels 或任何其他函数根据 ID 来自动(而不是手动)仅标记最后一个点是(紫色和绿色线)的gg_text() …
我有一个线图,它绘制了从 Excel 文件加载的 2 列数据。请参阅绘图: Matplotlib 线图
我想使用函数之间的填充或类似的东西(如图像 2)来显示图中每行(即数据列)的标准差,但是我不知道如何包含它。任何帮助都会很棒。请注意,我对此很陌生...... 我希望我的情节看起来如何
这是我的线图使用的代码:
import pandas as pd
import scipy as sp
from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
Probability_fast_gamma_on_theta = pd.read_excel(r'C:\Users\RL\Excel work\Probability_of_a_theta_cycle_containing_fast_gamma.xlsx')
fig5, ax5=plt.subplots()
plt.plot(Probability_fast_gamma_on_theta.MIA)
plt.plot(Probability_fast_gamma_on_theta.CTL)
plt.grid(False)
plt.ylim(0.0, 0.6)
plt.xlim(0.0, 25)
plt.legend(['MIA', 'CTL'], loc='lower right')
plt.show()
Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的数据框:
head(length_test)
S.UNIT GENRE PATTERN
1 105 Conversation THAT_EXT
2 61 Conversation THAT_EXT
3 210 Conversation TO_EXT
4 196 Conversation TO_EXT
5 166 Academic Prose TO_EXT
6 152 Academic Prose TO_EXT
> str(length_test)
'data.frame': 7329 obs. of 3 variables:
$ S.UNIT : int 105 61 210 196 166 152 152 152 152 150 ...
$ GENRE : Factor w/ 5 levels "Academic Prose",..: 2 2 2 2 1 1 1 1 2 2 ...
$ PATTERN: Factor w/ 6 levels …Run Code Online (Sandbox Code Playgroud) 我在ggplot2库中使用qplot来创建折线图.我试图改变线的颜色和宽度.但问题是,无论我给参数赋值的是什么,线的宽度似乎都受到约束.在qplot函数中,我也尝试用"size"代替"lwd",但这并没有什么区别.
例如,这些值导致第一个图:
line.x <- c(1,2,3,4,5)
line.y <- c(1,2,3,4,5)
line.width <- c(1,2,3,4,5)
line.color <- c(1,2,3,4,5)
qplot(line.x, line.y, geom = 'line', lwd = line.width, colour = line.color) +
scale_color_gradientn(colours=rainbow(50)) +
theme(legend.position="none")
Run Code Online (Sandbox Code Playgroud)
如果我将第4个值更改line.width为40,则只会使其他部分相对较薄:
line.width <- c(1,2,3,40,5)
Run Code Online (Sandbox Code Playgroud)
再次增加到400具有类似的效果,其中第4段只能扩展到最大宽度:
line.width <- c(1,2,3,400,5)
Run Code Online (Sandbox Code Playgroud)
有没有办法增加线的最大厚度?
这是针对我的问题的最小、完整和可验证的玩具数据集:
genes = pd.Series(["Gene1"] * 16 + ["Gene2"] * 16)
conditions = pd.Series(np.tile(np.array(["Condition1"] * 8 + ["Condition2"] * 8), 2))
wellID = pd.Series(np.array(["W1"] * 4 + ["W2"] * 4 + ["W3"] * 4 + ["W4"] * 4 + ["W5"] * 4 + ["W6"] * 4 + ["W7"] * 4 + ["W8"] * 4))
fluo = pd.Series(np.array([np.sort(np.random.logistic(size=4)) for _ in range(8)]).flatten())
cycles = pd.Series(np.tile(np.array([0, 1, 2, 3]), 8))
df = pd.concat([genes, conditions, wellID, cycles, fluo], axis=1)
df.columns = ["Gene", "Condition", "WellID", …Run Code Online (Sandbox Code Playgroud) 我有如下数据:
#df
df = pd.DataFrame({
'id': {0: -3, 1: 2, 2: -3, 3: 1},
'val': {0: 0.4, 1: 0.03, 2: 0.88, 3: 1.3},
'indicator': {0: 'A', 1: 'A', 2: 'B', 3: 'B'},
'count': {0: 40000, 1: 5779, 2: 3000, 3: 31090}
})
df
Run Code Online (Sandbox Code Playgroud)
如果我执行以下代码,我将得到:
sns.relplot(x = 'id', y = 'val', hue = 'indicator', size = 'count', data = df)
Run Code Online (Sandbox Code Playgroud)
我想要一条线连接这些点。但如果我将绘图更改为线图,我将得到任何图表。
sns.lineplot(x = 'id', y = 'val', hue = 'indicator', size = 'count', data = df)
Run Code Online (Sandbox Code Playgroud)
我RelPlot使用 Seaborn 绘制了一个简单的图,它返回了一个Facetgrid对象。我使用的代码如下:
import seaborn as sns
palette = sns.color_palette("rocket_r")
g1 = sns.relplot(
data=df,
x="number_of_weeks", y="avg_streams",
hue="state", col="state",
kind="line", palette=palette,
height=5, aspect=1, facet_kws=dict(sharex=False), col_wrap=3,
)
Run Code Online (Sandbox Code Playgroud)
我正在使用的数据框具有以下结构:
avg_streams date year number_of_weeks state
4 0.104011 31-01 2020 4 it
5 1.211951 07-02 2020 5 it
6 0.559374 14-02 2020 6 it
7 0.304257 21-02 2020 7 it
8 0.199218 28-02 2020 8 it
... ... ... ... ... ...
175 -0.938890 26-06 2020 25 br
176 -0.483821 …Run Code Online (Sandbox Code Playgroud) 我使用 for 循环在 Bokeh 中创建了多线图(代码如下)。
在输出示例中只有两条曲线。在这种情况下,我可以为每条曲线设置颜色列表。但是,如果我需要绘制大量曲线,如何使用散景调色板之一(例如配对)?我想自动执行此操作,以避免每次增加要绘制的行数时都必须制作颜色列表。
import pandas as pd
import numpy as np
from bokeh.core.properties import value
from bokeh.plotting import figure, show
from bokeh.io import output_notebook
from bokeh.models import ColumnDataSource, CDSView, GroupFilter, HoverTool
from bokeh.palettes import Paired
bokeh_test=pd.read_excel(data, 'bokeh line plot')
display(bokeh_test)
x y
item
A 4 0.0000
A 5 0.0000
A 36 39.8879
A 66 46.2022
A 97 32.9306
A 127 25.7896
A 158 21.9209
A 189 18.6405
B 6 4.4775
B 7 1.1710
B 8 0.0000
B …Run Code Online (Sandbox Code Playgroud) 我使用seaborn的线图根据数据进行绘制,其代码如下所示:
sns.lineplot( x=df["#Energy"], y=df["py"]+df["px"]+df["pz"])
Run Code Online (Sandbox Code Playgroud)
我得到的情节是
现在我想将其下方的区域涂成不透明的蓝色,我该怎么做,我在seaborn lineplot文档中找不到与此相关的任何内容,感谢所有帮助的努力