英文:
How do I include subscripts with fviz_pca_var labels?
问题
我正在使用fviz_pca_var
来可视化我的PCA,我想要为某些变量包括下标。如何使它们正确显示?
另外,有没有更简单的方法来翻转y轴,使值倒置?(我仍希望-1位于左侧)。
df <- structure(list(`P[1]` = c(-0.9, -1, -1.1, -1.2, -1.28, -1.35, -1.41, -1.45, -1.47, -1.47, -1.45, -1.41, -1.35, -1.27, -1.17, -1.06, -0.93, -0.79, -0.64, -0.49, -0.33, -0.17, -0.01, 0.14,
0.29, 0.44, 0.57, 0.68, 0.78, 0.86, 0.92, 0.97, 1, 1.02, 1.03, 1.03, 1.02, 1.02, 1.01, 1, 1, 0.99, 0.98, 0.96, 0.94, 0.92, 0.89, 0.86, 0.82, 0.79, 0.75),
`Z[2]` = c(0.56, 0.5, 0.44, 0.38, 0.32,
0.27, 0.22, 0.19, 0.18, 0.18, 0.22, 0.27, 0.36, 0.47, 0.6, 0.74, 0.88, 1.02, 1.15, 1.25, 1.32, 1.35, 1.33, 1.25, 1.11, 0.91, 0.67, 0.38, 0.06, -0.27, -0.61, -0.93, -1.22, -1.46, -1.66, -1.79,
-1.86, -1.87, -1.82, -1.72, -1.56, -1.37, -1.14, -0.89, -0.62, -0.34, -0.06, 0.23, 0.51, 0.8, 1.08),
`C3[1]` = c(-0.16, -0.14, -0.12, -0.1, -0.25, -0.53, -0.29, -0.83, -0.69, -0.06, -0.98,
-0.53, -0.8, 1.17, 0.64, 0.09, 0.61, 1.97, 0.84, 1.85, -0.98, -0.67, -0.82, -1, -0.47, -1.01, -0.79, -0.97, -1.33, -1.48, -1.59, -1.71, -1.8, -1.88, -1.94, -2.09, -1.96, -1.96, -1.95, -1.97,
-1.88, -1.82, -1.63, -1.52, -1.54, -1.4, -1.42, -1.29, -1.19, -0.83, -0.69),
`C3[2]` = c(0.77, 0.79, 0.81, 0.82, 0.79, 0.71, 0.78, 0.63, 0.67, 0.86, 0.59, -0.34, 0.65, 1.23, 1.53, 1.7, 0.99,
2.07, 1.71, 3.01, -0.53, -0.53, 0.54, 0.43, 0.52, -0.59, 0.25, 0.1, -0.5, -0.57, -0.54, -0.57, -0.55, -0.55, -0.56, -0.83, -0.46, -0.46, -0.46, -0.61, -0.49, -0.51, -0.2, -0.13, -0.39, -0.26,
-0.54, -0.44, -0.44, 0.22, 0.34)),
row.names = c(NA, -51L), class = c("tbl_df", "tbl", "data.frame"))
pca <- princomp(df, scores = TRUE)
fviz_pca_var(pca, title = "", repel = TRUE, ggtheme = theme_bw()) +
scale_x_reverse() +
scale_y_continuous(limits = c(-0.2, 0.6))
英文:
I have a PCA that I'm visualizing with fviz_pca_var and I want to include subscripts for some of my variables. How do I get these to display properly?
Also, is there any easier way to flip the y-axis so the values are inverted? (I still want -1 to be on the left).
df <- structure(list(`P[1]` = c(-0.9, -1, -1.1, -1.2, -1.28, -1.35, -1.41, -1.45, -1.47, -1.47, -1.45, -1.41, -1.35, -1.27, -1.17, -1.06, -0.93, -0.79, -0.64, -0.49, -0.33, -0.17, -0.01, 0.14,
0.29, 0.44, 0.57, 0.68, 0.78, 0.86, 0.92, 0.97, 1, 1.02, 1.03, 1.03, 1.02, 1.02, 1.01, 1, 1, 0.99, 0.98, 0.96, 0.94, 0.92, 0.89, 0.86, 0.82, 0.79, 0.75),
`Z[2]` = c(0.56, 0.5, 0.44, 0.38, 0.32,
0.27, 0.22, 0.19, 0.18, 0.18, 0.22, 0.27, 0.36, 0.47, 0.6, 0.74, 0.88, 1.02, 1.15, 1.25, 1.32, 1.35, 1.33, 1.25, 1.11, 0.91, 0.67, 0.38, 0.06, -0.27, -0.61, -0.93, -1.22, -1.46, -1.66, -1.79,
-1.86, -1.87, -1.82, -1.72, -1.56, -1.37, -1.14, -0.89, -0.62, -0.34, -0.06, 0.23, 0.51, 0.8, 1.08),
`C3[1]` = c(-0.16, -0.14, -0.12, -0.1, -0.25, -0.53, -0.29, -0.83, -0.69, -0.06, -0.98,
-0.53, -0.8, 1.17, 0.64, 0.09, 0.61, 1.97, 0.84, 1.85, -0.98, -0.67, -0.82, -1, -0.47, -1.01, -0.79, -0.97, -1.33, -1.48, -1.59, -1.71, -1.8, -1.88, -1.94, -2.09, -1.96, -1.96, -1.95, -1.97,
-1.88, -1.82, -1.63, -1.52, -1.54, -1.4, -1.42, -1.29, -1.19, -0.83, -0.69),
`C3[2]` = c(0.77, 0.79, 0.81, 0.82, 0.79, 0.71, 0.78, 0.63, 0.67, 0.86, 0.59, -0.34, 0.65, 1.23, 1.53, 1.7, 0.99,
2.07, 1.71, 3.01, -0.53, -0.53, 0.54, 0.43, 0.52, -0.59, 0.25, 0.1, -0.5, -0.57, -0.54, -0.57, -0.55, -0.55, -0.56, -0.83, -0.46, -0.46, -0.46, -0.61, -0.49, -0.51, -0.2, -0.13, -0.39, -0.26,
-0.54, -0.44, -0.44, 0.22, 0.34)),
row.names = c(NA, -51L), class = c("tbl_df", "tbl", "data.frame"))
pca <- princomp(df, scores = TRUE)
fviz_pca_var(pca, title = "", repel = TRUE, ggtheme = theme_bw()) +
scale_x_reverse() +
scale_y_continuous(limits = c(-0.2, 0.6))
答案1
得分: 2
只需在fviz_pca_var
函数中添加parse = TRUE
参数。
fviz_pca_var(pca,
title = "",
repel = TRUE,
#这是我所做的唯一更改
parse = TRUE,
ggtheme = theme_bw())
# 你的其余代码
英文:
You just need to add the parse = TRUE
argument to the fviz_pca_var
function.
fviz_pca_var(pca,
title = "",
repel = TRUE,
#This is the only change I made
parse = T,
ggtheme = theme_bw())
# Rest of your code
答案2
得分: 1
上面的回答是正确的,但让我感到烦恼的是标签和线条重叠在一起。我认为您可以在fviz_pca_var()
的...
参数中添加nudge_y
,但实际上这不会传递给geom_text()
,所以没有效果。
如果您想要使用nudge_y
,您需要首先绘制没有标签的图,然后再添加它们。为此,您需要从您的pca
对象(具有类别princomp
)创建一个data.frame
,方式与factoextra::fviz()
相同:
dat <- facto_summarize(pca, element = "var", axes = c(1, 2), result = c("coord", "contrib", "cos2"))
然后,您可以通过设置geom = "arrow"
来绘制没有文本的图,自己添加文本并根据需要调整nudge_y
参数:
fviz_pca_var(pca, title = "", geom = "arrow", ggtheme = theme_bw()) +
scale_y_continuous(limits = c(-0.2, 0.6)) +
geom_text(
data = dat,
aes(x = Dim.1, y = Dim.2, label = name),
parse = TRUE,
nudge_y = 0.02,
)
英文:
The above answer is correct but it annoyed me that the labels and the lines overlap. I thought you could add nudge_y
to the ...
arguments of the fviz_pca_var()
but this does not actually get passed through to geom_text()
, so it has no effect.
If you want to use nudge_y
, you need to initially draw the plot without labels, then add them. To do that you need to create a data.frame
from your pca
object (which has class princomp
), in the same way as factoextra::fviz()
:
dat <- facto_summarize(pca, element = "var", axes = c(1, 2), result = c("coord", "contrib", "cos2"))
Then you can draw the plot without text by setting geom = "arrow"
, add the text yourself and adjust the nudge_y
parameter as desired:
fviz_pca_var(pca, title = "", geom = "arrow", ggtheme = theme_bw()) +
scale_y_continuous(limits = c(-0.2, 0.6)) +
geom_text(
data = dat,
aes(x = Dim.1, y = Dim.2, label = name),
parse = TRUE,
nudge_y = 0.02,
)fviz_pca_var(pca, title = "", geom = "arrow", ggtheme = theme_bw()) +
scale_y_continuous(limits = c(-0.2, 0.6)) +
geom_text(
data = dat,
aes(x = Dim.1, y = Dim.2, label = name),
parse = TRUE,
nudge_y = 0.02,
)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论