ebo*_*ath 2 r ggplot2 geom-text
我正在研究一个相当大的散点图,并且使用ggrepel作为避免标签重叠的方法。然而,我需要区分一些数据点,这个想法是也依赖size和face这样做。
我发布数据集:
\n\nstructure(list(horizontal = c(-0.352696359157562, 0.780073940753937, \n0.0911642983555794, -0.153335213661194, -0.540096700191498, -0.615496337413788, \n0.310178399085999, 0.797275483608246, -0.157139003276825, -0.33426907658577, \n0.253628611564636, 0.474333256483078, 0.0280635561794043, -0.522810518741608, \n0.712112784385681, 0.156166926026344, 0.378900289535522, -0.10096962749958, \n-0.751460909843445, 0.000464908313006163, -0.368376433849335, \n-0.0745543912053108, -0.496564328670502, 0.703955709934235, -0.10785873234272, \n0.371504008769989, -0.586291670799255, 0.191669017076492, -0.154560878872871, \n0, 0.843597233295441, 0.449101448059082, -0.241541013121605, \n-0.0455610118806362, -0.382365942001343, -0.00278944987803698, \n0.0590433552861214, -0.328732430934906, 0.0665241554379463, -0.384352385997772, \n-0.104266256093979, -0.330000370740891, 0.638868570327759, 0.319561064243317, \n-0.373574942350388, 0.298344343900681, -0.394538104534149, -0.994185328483582, \n0.654802262783051, -0.0239639095962048, -0.14082495868206, 0.726947605609894, \n0.067158117890358, 1.09101295471191, 0.808771371841431, -0.511610448360443, \n0.873182356357574, 0.33600190281868, -0.62741494178772, 0.253036916255951, \n-0.717691659927368, 0.329070538282394, 0.364699423313141, -0.0409119315445423, \n-0.356035232543945, -0.00621286546811461, 0.333550602197647, \n-0.327464520931244, 0.163056030869484, 0.441578358411789, -0.463090926408768, \n0.791485249996185, -1.08877301216125, 0.0416726917028427, -0.581684827804565, \n0.389889031648636, -0.32378751039505, 0.184145957231522, -0.291793346405029, \n-0.046744417399168, -0.593223035335541, -0.619257867336273, -0.41385293006897, \n0.565666615962982, -0.486125022172928, 0.246443659067154, -0.0412923097610474, \n0.893342435359955, 0.337903827428818, -0.551677107810974, 0.401258170604706, \n-0.628006637096405, 0.148221224546432, -0.0568033419549465, -0.530756235122681\n), vertical = c(-0.176369309425354, 0.474502354860306, 0.0566342882812023, \n0.611396670341492, 0.376279890537262, 0.59516716003418, -0.177679508924484, \n-0.549056708812714, 0.0260348655283451, -0.0717226788401604, \n-0.104350790381432, -0.202235117554665, -0.110944032669067, 0.147080093622208, \n-0.0262884516268969, 0.0451383702456951, 0.615623116493225, 0.445720255374908, \n0.0480968803167343, 0.400624185800552, 0.248091980814934, -0.716846406459808, \n0.11407159268856, -0.152194082736969, 0.0246401410549879, 0.150926142930984, \n-0.437859088182449, 0.0160182043910027, 0.20544721186161, 0.197501495480537, \n-0.0254431646317244, 0.218464657664299, 0.119692757725716, 0.0423489212989807, \n0.0680879354476929, 0.0461949817836285, -0.037192665040493, -0.0420530699193478, \n-0.252572000026703, -0.365248888731003, -0.542886137962341, 0.195641875267029, \n-0.243147045373917, 0.156293720006943, 0.128018841147423, 0.592842638492584, \n0.29944321513176, 0.0551972948014736, 0.0954329967498779, -0.230890363454819, \n0.291117131710052, -0.123327493667603, 0.298259824514389, 0.291962414979935, \n0.0570146627724171, -0.248049721121788, -0.147798582911491, -0.363093376159668, \n0.121045224368572, -0.186850875616074, 0.0238371174782515, 0.201136231422424, \n0.0619173347949982, -0.0573527812957764, -0.345680475234985, \n-0.637051165103912, -0.174467399716377, -0.155659765005112, -1.08539187908173, \n-0.414698243141174, 0.499438345432281, 0.0502946302294731, -1.10627043247223, \n0.559918701648712, 0.125187128782272, 0.52006334066391, -0.0163563191890717, \n-0.787765979766846, 0.10916892439127, 0.313010096549988, 0.167831897735596, \n0.128610551357269, 0.0104815689846873, -0.134907931089401, 0.116861052811146, \n-0.164915651082993, -1.09490132331848, -0.140782698988914, 0.54309743642807, \n0.206757411360741, 0.346103101968765, -0.108830809593201, 0.241710051894188, \n-0.327760368585587, 0.185540676116943), issue = c("issue", "issue", \n"issue", "issue", "issue", "issue", "issue", "issue", "issue", \n"issue", "issue", "party", "party", "party", "party", "party", \n"party", "party", "party", "party", "party", "party", "party", \n"party", "party", "party", "party", "party", "party", "party", \n"party", "party", "party", "party", "party", "party", "party", \n"party", "party", "party", "party", "party", "party", "party", \n"party", "party", "party", "party", "party", "party", "party", \n"party", "party", "party", "party", "party", "party", "party", \n"party", "party", "party", "party", "party", "party", "party", \n"party", "party", "party", "party", "party", "party", "party", \n"party", "party", "party", "party", "party", "party", "party", \n"party", "party", "party", "party", "party", "party", "party", \n"party", "party", "party", "party", "party", "party", "party", \n"party", "party"), year = c("9999", "9999", "9999", "9999", "9999", \n"9999", "9999", "9999", "9999", "9999", "9999", "05", "05", "05", \n"05", "05", "05", "05", "05", "06", "06", "06", "06", "06", "06", \n"06", "06", "07", "07", "07", "07", "07", "07", "07", "07", "07", \n"07", "07", "08", "08", "08", "08", "08", "09", "09", "09", "09", \n"09", "10", "10", "10", "10", "10", "10", "10", "10", "11", "11", \n"11", "11", "11", "11", "11", "11", "11", "11", "12", "12", "12", \n"12", "12", "12", "12", "12", "12", "13", "13", "13", "13", "13", \n"13", "13", "13", "15", "15", "15", "15", "15", "15", "15", "15", \n"15", "16", "16", "16"), object_n = c("welfare", "ecolib", "ecoreform", \n"europe", "cultlib", "immig", "security", "defense", "edu", "env", \n"infra", "cons05", "lab_uk05", "libdem05", "union05", "spd05", \n"fdp_d05", "gr_d05", "linke/pds05", "\xc3\xb6vp06", "sp\xc3\xb606", "fp\xc3\xb606", \n"gr_a06", "cda06", "pvda06", "vvd06", "sp06", "rpr/ump07", "psf07", \n"udf07", "svp07", "fdp_ch07", "sps07", "cvp07", "gr_ch07", "fg07", \n"ff07", "lab_irl07", "\xc3\xb6vp08", "sp\xc3\xb608", "fp\xc3\xb608", "gr_a08", "bz\xc3\xb608", \n"union09", "spd09", "fdp_d09", "gr_d09", "linke/pds09", "cons10", \n"lab_uk10", "libdem10", "cda10", "pvda10", "vvd10", "rr_nl10", \n"sp10", "svp11", "fdp_ch11", "sps11", "cvp11", "gr_ch11", "fg11", \n"ff11", "lab_irl11", "sf11", "indep_irl11", "rpr/ump12", "psf12", \n"rr_f12", "cda12", "pvda12", "vvd12", "rr_nl12", "d6212", "sp12", \n"\xc3\xb6vp13", "sp\xc3\xb613", "fp\xc3\xb613", "gr_a13", "union13", "spd13", "gr_d13", \n"linke/pds13", "cons15", "lab_uk15", "libdem15", "ukip15", "svp15", \n"fdp_ch15", "sps15", "cvp15", "gr_ch15", "fg16", "ff16", "sf16"\n)), .Names = c("horizontal", "vertical", "issue", "year", "object_n"\n), row.names = c(NA, -95L), class = c("tbl_df", "tbl", "data.frame"\n))\nRun Code Online (Sandbox Code Playgroud)\n\n目前我使用下面的代码来指定绘图:
\n\nggplot(dat, aes(horizontal, vertical)) +\n geom_point(data=subset(dat, dat$issue=="issue"),\n color = \'black\', size=5, shape=3) +\n geom_point(data=subset(dat, dat$issue=="party"),\n color = \'black\', aes(shape=year), size=2) +\n scale_shape_manual(values=c(19,15,17,10,11,12,18,13,14,7,8,9,0,5,1))+\n geom_text_repel(data=subset(dat, dat$issue=="party"),\n aes(horizontal, vertical, label = object_n), size=2.5, family = "Franklin Gothic Demi") +\n geom_text_repel(data=subset(dat, dat$issue=="issue"),\n aes(horizontal, vertical, label = object_n), size=3.2,\n family = "Franklin Gothic Demi",\n fontface = \'bold\') +\n theme_classic(base_size = 16) +\n theme(axis.line=element_blank(),axis.text.x=element_blank(),\n axis.text.y=element_blank(),axis.ticks=element_blank(),\n axis.title.x=element_blank(),\n axis.title.y=element_blank(),legend.position="none",\n panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),\n panel.grid.minor=element_blank(),plot.background=element_blank())\nRun Code Online (Sandbox Code Playgroud)\n\n这工作得很好,并产生以下图:
\n\n\n\n然而,问题是,鉴于我指定了geom_text_repel两个子集,标签将重叠,这消除了使用此几何图形的意义。您知道如何将其geom_text_repel与条件size和设置为一吗face?我尝试过类似于此处建议的方法,但我不断遇到错误: ggplot2 不知道如何处理类 uneval 的数据
例如,这是我尝试过的:
\n\nff <- function(issue){ifelse(dat$issue=="issue",3.2,2.5)}\n\nmds <- ggplot(dat, aes(horizontal, vertical)) +\n geom_point(data=subset(dat, dat$issue=="issue"),\n color = \'black\', size=5, shape=3) +\n geom_point(data=subset(dat, dat$issue=="party"),\n color = \'black\', aes(shape=year), size=2) +\n scale_shape_manual(values=c(19,15,17,10,11,12,18,13,14,7,8,9,0,5,1))+\n geom_text_repel(dat,aes(horizontal, vertical, label = object_n, size = factor(issue)),\n family = "Franklin Gothic Demi") + scale_size_manual(values=ff(issue)) +\n theme_classic(base_size = 16) +\n theme(axis.line=element_blank(),axis.text.x=element_blank(),\n axis.text.y=element_blank(),axis.ticks=element_blank(),\n axis.title.x=element_blank(),\n axis.title.y=element_blank(),legend.position="none",\n panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),\n panel.grid.minor=element_blank(),plot.background=element_blank())\nmds\nRun Code Online (Sandbox Code Playgroud)\n\n任何帮助深表感谢!
\n这对你有帮助吗?只需创建一个新变量fontface并用于scale_size_manual模仿现有的文本大小:
library(tidyverse)
library(ggrepel)
# this is a nice helper fxn if you are using the same theme a lot :)
theme_set(theme_classic(base_size = 16) +
theme(axis.line=element_blank(),axis.text.x=element_blank(),
axis.text.y=element_blank(),axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),legend.position="none",
panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),plot.background=element_blank()))
dat$ff <- ifelse(dat$issue == "issue", "bold", "plain")
ggplot(dat, aes(horizontal, vertical)) +
geom_point(data=subset(dat, dat$issue=="issue"),
color = 'black', size=5, shape=3) +
geom_point(data=subset(dat, dat$issue=="party"),
color = 'black', aes(shape=year), size=2) +
scale_shape_manual(values=c(19,15,17,10,11,12,18,13,14,7,8,9,0,5,1)) +
geom_text_repel(aes(label = object_n, size = issue, fontface = ff)) +
scale_size_manual(values = c(3.5, 2.5))
Run Code Online (Sandbox Code Playgroud)
请记住,文本的最终大小将部分取决于您用于记录的图形设备的大小。这是宽度为 800 px、高度为 511 px 的 png 的样子:
