Nano Hash - криптовалюты, майнинг, программирование

ggplot с масштабом фасетов и динамической позицией geom_text

Я использую gglot с facet_wrap для построения некоторых данных. Размеры в разных гранях сильно различаются (0,2 по сравнению с 2000 годом).

Я рисую geom_bar и добавляю geom_text с теми же значениями над полосой. Теперь возникла проблема. Значение geom_text предназначено для «больших» полос под заголовком.

Я вижу два возможных решения, оба не могу реализовать.

  1. Переключите положение geom_text, чтобы большие полосы отображались внутри. Это можно сделать с помощью vjust в aes. Но для каждого аспекта точка переключения должна быть разной.

  2. Я хотел бы масштабировать ось Y до 110%, чтобы было место для текста. Но я не хочу вручную ставить это в свою программу, потому что сюжет делается автоматически.

введите описание изображения здесь Код, который я использовал

library(ggplot2)
testdata <- data.frame(a = c(0.1,0.2,0.3, 4,5,6, 7000,8000,9000),
                   b = c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c' ),
                   c = c('aa', 'bb', 'cc', 'aa', 'bb', 'cc', 'aa', 'bb', 'cc'))

ggplot(testdata, aes(x = c, y = a)) +
  geom_bar(stat = 'identity') +
  geom_text(aes(label = a), vjust = -1) +  
  facet_wrap(~b, ncol=1, scales = 'free_y')
31.08.2017

  • Голосую за второй. stackoverflow.com/questions/18046051/ 31.08.2017
  • geom_text (aes (label = a), position = position_dodge (width = 1), vjust = 2, size = 3) 31.08.2017
  • Спасибо. Я забыл упомянуть, что это всего лишь пример. Это хорошо работает для довольно одинаковых данных, когда все полосы достаточно велики для текста. Но если, например, 0,1 становится 0,01, а 7000 становится 7, то этого больше не видно. В таком случае было бы хорошо, если бы это было над стойкой. Но как это сделать с другой точкой разделения для каждого аспекта? 31.08.2017

Ответы:


1

Вот решение для вас:

* (Взгляните на вопрос и ответ по stackoverflow, если вы хотите узнать больше)

library(data.table)
testdata <- data.table(testdata)
testdata[,y_min:= a*0.5, by = c]
testdata[,y_max:= a*1.5, by = c]

ggplot(testdata, aes(x = c, y = a)) +
  geom_bar(stat = 'identity') +
  geom_text(aes(label = a), vjust = -1) + 
  facet_wrap(~b, ncol=1, scales = 'free_y') +
  geom_blank(aes(y = y_min)) +
  geom_blank(aes(y = y_max))

введите описание изображения здесь

Сначала вам нужно создать переменные y_min и y_max для каждой группы. И "заговорите" их через geom_blank().

31.08.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..