简体   繁体   中英

plotting a 3D bubble graph on R

I am currently trying to plot a 3D bubble graph with 2 (then later i will try with 3) axes, as in excel, but on R (here is an example of the 3D bubble plot i am trying to plot) : https://fr.extendoffice.com/documents/excel/2017-excel-create-bubble-chart.html

library(ggplot2)
library(scales)

p <- ggplot(plot_3D, aes(x = var_2020_2021_valeur, y = var_2020_2021_CA)) + 
  geom_point(aes(color = Specialite, size = CA.annee.N), alpha = 0.5) +
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07",
                               "#FFB5C5", "#BF87B3", "#7F5AA2", "#3F2D91", "#000080",
                               "#2468A0", "#a32cc4", "#9073db", "#c51f5d",
                               "#5800ff", "#4455ff", "#48ff50")) +
  scale_size(range = c(0.5, 12)) + # Réglage de la plage de tailles des points
  ylim(-100, 100) + 
  xlim (-100, 100) + 
  geom_hline(yintercept=0) +
  geom_vline(xintercept=0) +
  scale_y_continuous(labels = percent) +
  scale_x_continuous(labels = percent)

I get the following message of error :

"Scale for 'y' is already present. Adding another scale for 'y', 
which
will replace the existing scale.
Scale for 'x' is already present. Adding another scale for 'x', 
which
will replace the existing scale."

Even when i abandon the two last lines of code, it doesn't work...

Here is the structure of my dataset plot_3D :

structure(list(Specialite = c("ANESTHESIE REANIMATION", "Autres", 
"CHIRURGIE GENERALE ET VISCERALE", "CHIRURGIE PLASTIQUE", "GASTRO ENTEROLOGIE", 
"GYNECOLOGIE OBSTETRIQUE", "IMAGERIE", "MAXILLO STOMATO", "MEDECINE GENERALE et 
INTERNE", 
"OPHTALMOLOGIE", "ORL", "ORTHOPEDIE", "PNEUMOLOGIE", "URGENTISTE", 
"UROLOGIE"), CA.annee.N = c(64310L, 25298L, 1205537L, 42020L, 
3694964L, 344370L, 3454L, 588033L, 228439L, 1849804L, 27358L, 
2739286L, 0L, 916L, 432907L), Nombre.de.sejours.annee.N = c(171L, 
34L, 1504L, 56L, 9224L, 682L, 9L, 1103L, 888L, 2276L, 57L, 4068L, 
0L, 2L, 720L), CA.annee.N.1 = c(50135L, 454L, 790559L, 15531L, 
2644858L, 304242L, 3026L, 402195L, 459813L, 1308933L, 20597L, 
2269691L, 0L, 3901L, 318352L), Nombre.de.sejours.annee.N.1 = c(150L, 
1L, 1067L, 25L, 7276L, 627L, 9L, 802L, 1918L, 1693L, 43L, 3519L, 
0L, 7L, 547L), CA.annee.N.2 = c(48583L, 453L, 941610L, 16675L, 
3140507L, 385813L, 2950L, 642017L, 691982L, 1704005L, 51602L, 
2261368L, 7145L, 4648L, 308169L), Nombre.de.sejours.annee.N.2 = c(154L, 
1L, 1264L, 28L, 8317L, 831L, 8L, 1286L, 3231L, 2269L, 127L, 3610L, 
26L, 10L, 551L), CA_par_sejour_N = c(376.081871345029, 744.058823529412, 
801.553856382979, 750.357142857143, 400.581526452732, 504.941348973607, 
383.777777777778, 533.121486854034, 257.251126126126, 812.743409490334, 
479.964912280702, 673.374139626352, NaN, 458, 601.259722222222
), CA_par_sejour_N1 = c(334.233333333333, 454, 740.917525773196, 
621.24, 363.504398020891, 485.234449760766, 336.222222222222, 
501.490024937656, 239.735662148071, 773.14412285883, 479, 644.981813015061, 
NaN, 557.285714285714, 581.99634369287), CA_par_sejour_N2 = c(315.474025974026, 
453, 744.944620253165, 595.535714285714, 377.600937838163, 464.275571600481, 
368.75, 499.235614307932, 214.169606932838, 750.993829881005, 
406.314960629921, 626.417728531856, 274.807692307692, 464.8, 
559.290381125227), var_2020_2021_valeur = c(0.125207553640259, 
0.638896087069189, 0.0818395145215454, 0.207837780659878, 0.101999119223065, 
0.0406131494220115, 0.141440846001322, 0.063074957314078, 0.0730615704860669, 
0.051218505658529, 0.00201443064864667, 0.0440203522616658, NaN, 
-0.178159446295822, 0.0330987964754596), var_2020_2021_CA = c(0.282736611149895, 
54.7224669603524, 0.524917178856986, 1.70555662867813, 0.397036816343259, 
0.131895004634469, 0.141440846001322, 0.462059448774848, -0.503191514811456, 
0.413215191304673, 0.328251687138904, 0.206898207729598, NaN, 
-0.765188413227378, 0.35983753832236)), class = "data.frame", row.names = c(NA, 
-15L))

Could anyone help ?

You should remove xlim and ylim because they can be used when you don't specify anything else on your axis. So your could add the limits to both scale_*_continuous in the limits arguments like this:

library(ggplot2)
library(scales)
p <- ggplot(plot_3D, aes(x = var_2020_2021_valeur, y = var_2020_2021_CA)) + 
  geom_point(aes(color = Specialite, size = CA.annee.N), alpha = 0.5) +
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07",
                                "#FFB5C5", "#BF87B3", "#7F5AA2", "#3F2D91", "#000080",
                                "#2468A0", "#a32cc4", "#9073db", "#c51f5d",
                                "#5800ff", "#4455ff", "#48ff50")) +
  scale_size(range = c(0.5, 12)) + # Réglage de la plage de tailles des points
  geom_hline(yintercept=0) +
  geom_vline(xintercept=0) +
  scale_y_continuous(labels = percent, limits = c(-100, 100)) +
  scale_x_continuous(labels = percent, limits = c(-100, 100))
p
#> Warning: Removed 1 rows containing missing values (geom_point).

Created on 2022-07-12 by the reprex package (v2.0.1)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM