我想知道是否可以手动将标签放置在 ggplot 的图例中?
我的例子是这样的:我有一个关于国家/地区的数据,我正在为每个大陆制作 100% 的堆积条形图,所以我有:
dt <- data.table(continent = c(rep('Africa', 2), rep('Asia', 3), rep('Europe', 4)),
country = c('Nigeria', 'Kenya',
'China', 'India', 'Japan',
'Germany', 'Sweden', 'Spain', 'Croatia'),
value = runif(9, 0, 10),
number=(1:9))
ggplot(data=dt,
aes(x = continent, y = value, fill = as.factor(number))) +
geom_bar(stat = "identity", position = "fill", color='white', width=0.3 ) +
labs(x = '', y = 'Percentage') +
scale_y_continuous(expand=c(0,0)) +
scale_fill_manual('Country',
labels = dt[, country],
values = (grDevices::colorRampPalette(c('#BB16A3', '#f8e7f5')))(9)) +
theme(legend.position='bottom', aspect.ratio = 1) +
guides(fill = …Run Code Online (Sandbox Code Playgroud) 我希望我在这里遗漏了一些令人痛苦的明显的东西。
我希望更新(例如,修复标题、实验室等)从gratia::draw(). 不太确定为什么我无法更新该对象。
有一个简单的解决方案吗?
# devtools::install_github('gavinsimpson/gratia')
library('mgcv')
library('gratia')
dat <- gamSim(1, n = 400, dist = "normal", scale = 2, verbose = FALSE)
mod <- gam(y ~ s(x0), data = dat, method = "REML")
draw(mod)
Run Code Online (Sandbox Code Playgroud)

p = draw(mod)
# P is a ggobject.
class(p)
#> [1] "gg" "ggplot"
Run Code Online (Sandbox Code Playgroud)
那么,为什么我无法更新p?
p + ggtitle("My title")
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.2.1)于 2019-02-26 创建
您好,我是 R 和这个论坛的新手。\n我遇到了与之前的发帖者相同的问题,但我的问题没有得到解决。当我尝试使用包 lme4 和中介运行多级中介模型时,我收到消息:“中介模型尚未实现”。
\n\n我的数据:
\n\ndata.frame\': 25383 obs. of 115 variables:\n$ PID : num 1 1 1 1 1 1 1 1 1 1 ...\n$ T0_AGE : num 66.6 79.7 85.6 87 79.9 67.4 80 72 80.1 \n68$ T0_ASEXE : Factor w/ 2 levels "Male","Female": 1 1...\n$ T0_ALIVING_R : num 0 0 0 0 1 0 0 0 1 0 ...\n$ T0_educationcat : Factor w/ 3 levels "high","middle",..\n$ FI_morbidity_corrected : num 0.0625 0 0.125 0.0625 …Run Code Online (Sandbox Code Playgroud) 我对138个问题进行了调查,其中只有少数是李克特型问题,其中一些问题的规模不同。
我一直在尝试使用R中的Likert包来分析和图形化地描绘数据,但是,我在努力理解其中的任何一个方面都非常努力。
我已经看过“演示”,它仅在您已经知道软件包发生了什么情况时才有用。它没有说明能够应用Likert软件包之前必须执行的任何步骤,可以实际应用于该软件包的内容,如何重命名变量等。您得到的只是一堆代码和一个兔子。试图解决所有问题的漏洞。
我已经搜寻了谷歌以获取有关使用Likert软件包的逐步指南,但没有发现任何问题。
任何人都可以将我引到指南中,或者至少可以提供在尝试使用Likert包之前必须对数据框采取的步骤吗?
我希望使用此软件包将我的一些专栏(包含Likert响应)适合堆积的条形图。
一旦我弄清楚了Likert软件包在清理后的数据帧中将接受什么,我应该可以按照演示进行操作……也许..
到目前为止,我是基于我对R的有限知识并试图自行解决问题而做的。
library(likert)
library(dplyr)
fdaff_likert <- select(f2f, RESPID, daff_rate)
fdaff_likert <- data.frame(fdaff_likert)
fdaff_likert <- likert(items=fdaff_likert[,2, drop = FALSE], nlevels = 5)
Run Code Online (Sandbox Code Playgroud)
我的likert的输出是:
summary(fdaff_likert)
Item low neutral high mean sd
1 daff_rate 9.977827 37.91574 52.10643 3.802661 1.302508
Run Code Online (Sandbox Code Playgroud)
但是,情节到处都是..(无序)
plot (fdaff_likert)
Run Code Online (Sandbox Code Playgroud)

李克特量表混乱,无法正确居中。另外,如何将y轴重命名为问题?
为了以后进行分析,如何将其划分为组级别(基于在原始数据帧中指定区域的另一列?
我有一个包含表达式的长标签的图,我想将它分成两行.
在表达式中添加"\n",结果不符合预期.
ylabel <- expression("A very long label with text and \n
expression"*(alpha+beta) [ij]*" A very long label with text and expression")
curve(x^3 - 3*x, -2, 2, xlab=xlabel)
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.谢谢
我一直在尝试在 gtable 单元格中指定 rasterGrob 的绝对位置,但没有成功。我希望能够使图像的范围与 y 轴上的值对齐。该脚本将钻芯图像与 ggplot2 方面绘制的多传感器数据对齐。例如,特定的放射线核心图像需要其顶部为 192 毫米,底部为 1482 毫米,但我希望比例从 0 到 1523 毫米。请参阅包含的链接以获取我正在做的事情的示例,但为了简单起见,我仅在此处发布了 MWE。是否可以在 gtable 单元格内指定 rasterGrob 的绝对位置?
就下面的 MWE 而言,迄今为止我唯一的解决方案是Rlogo.png使用使用时设置的相对位置来移动rasterGrob()。使用"native"坐标似乎也不是我所需要的。同样,我无法理解 中调用的位置参数gtable_add_grob()。
library(png)
library(ggplot2)
library(gtable)
# read Image
img <- readPNG(system.file("img", "Rlogo.png", package = "png"))
# convert to rastergrob
g <- rasterGrob(img, y = unit(0.5, "npc"), x = unit(0.5, "npc"))
# create plot
tp <- qplot(1:5, 1:5, geom="blank") + scale_y_reverse()
# convert plot to gtable
tt <- …Run Code Online (Sandbox Code Playgroud) 我一直在我的直方图上显示小刻度线的问题。我尝试了绘制未标记的主要刻度线的想法,但不会显示刻度线。我的代码非常繁琐,可能有一些多余的行。任何帮助,将不胜感激。
ggplot(data=Shrimp1, aes(Shrimp1$Carapace.Length))+
geom_histogram(breaks=seq(3.5, 25, by=0.1),
col="black",
fill="gray",
alpha=1)+
labs(title="Total Female Carapace Length")+
labs(x="Carapace Length (mm)", y="# of Shrimp")+
xlim(c(3.5, 25))+
theme_bw()+
scale_y_continuous(expand = c(0,0),
limits = c(0,200))+
scale_x_continuous(breaks=seq(2.5,25,2.5))+
theme(axis.text.x=element_text(size=30,angle=45,hjust=1))+
theme(plot.title=element_text(size=30, hjust=0.5))+
theme(axis.text=element_text(size=30, color = "black"),
axis.title=element_text(size=30,face="bold"))+
theme(panel.grid.major=element_line(colour="white"),
panel.grid.minor = element_line(colour = "white"))+
theme(panel.border=element_blank())+
theme(axis.ticks.x = (element_line(size=2)),
axis.ticks.y=(element_line(size=2)))+
theme(axis.ticks.length=unit(.55, "cm"))+
theme(panel.border=element_blank(), axis.line.x=element_line(colour="black"),
axis.line.y=element_line(colour="black"))
Run Code Online (Sandbox Code Playgroud)
存在主要刻度,但我需要它们之间以 0.1 的间隔进行次要刻度

您好,我正在使用 ComplexHeatmap 包并遵循他们的小插图,但由于某种原因,我似乎无法强制图例变为水平。例如,这里是一个例子,
set.seed(123)
library(ComplexHeatmap)
mat = matrix(rnorm(80, 2), 8, 10)
mat = rbind(mat, matrix(rnorm(40, -2), 4, 10))
rownames(mat) = paste0("R", 1:12)
colnames(mat) = paste0("C", 1:10)
ha_column = HeatmapAnnotation(df = data.frame(type1 = c(rep("a", 5), rep("b", 5))),
col = list(type1 = c("a" = "red", "b" = "blue")),
annotation_legend_param = list(type1 = list(
title_gp = gpar(fontsize = 16),
legend_direction = "horizontal", labels_gp = gpar(fontsize = 8)))
)
ht1 = Heatmap(mat, name = "ht1", column_title = "Heatmap 1", top_annotation = ha_column)
draw(ht1, heatmap_legend_side …Run Code Online (Sandbox Code Playgroud) 我试图用标记的每个县来绘制新墨西哥州的地图,但标签大小总是比所需的大得多。这是我到目前为止使用的代码。
plot_usmap("counties", include=("NM"), labels=TRUE, label_color="red")
Run Code Online (Sandbox Code Playgroud)
我的地图最终看起来像这样:

如何更改标签的大小以使其不重叠?我试过 size= 但这只是改变了寄宿生的大小。
谢谢您的帮助。
food_consumption %>%
group_by(food_category) %>%
summarise(mod= lm(co2_emmission ~ consumption))
Run Code Online (Sandbox Code Playgroud)
运行此代码后,我收到以下错误
错误:列的
mod长度必须为 1(汇总值),而不是 12
我怎样才能做到正确,并获得每个类别的回归结果?
我是R编程的新手(我一生都在SAS编程),我认为这是一个我无法找到答案的基本问题(找到了类似问题的答案,但没有找到答案).
想象一下,我们有一个二进制变量(我们称之为"v1"),它的值可以是0或1.我想创建一个新变量(我们称之为"v2"),它取值为每次出现1的新值或在0之后出现1s的字符串时,都会显示一个唯一的集群ID.最后,我想从v1创建"v2",如下所示:
Obs v1 v2
1 0 NA
2 0 NA
3 1 1
4 1 1
5 0 NA
6 1 2
7 0 NA
8 1 3
9 1 3
10 1 3
11 0 NA
12 1 4
Run Code Online (Sandbox Code Playgroud)
如果有人能够对此有所了解,我将非常感激.非常感谢.
我希望像素网格中填充正态分布的值,如下图所示

有谁知道如何在R中这样做?