2016-12-11 2 views
3

Я хочу, чтобы градиент заполнил график скрипки, основанный на плотности точек в бункерах (синий для максимальной плотности и красный для самого низкого).градиентное заполнение скрипки с использованием ggplot2

Я сгенерировал график, используя следующие команды, но не смог покрасить его на основе плотности (в данном случае, ширины скрипки. Я также хотел бы создавать полевые графики с подобной раскраской).

library("ggplot2") 
data(diamonds) 

ggplot(diamonds, aes(x=cut,y=carat)) + geom_violin() 
+0

Вы можете показать изображение (рисунок?) Ваш желаемого результата? Зачем вам нужны цвета; не влияет ли ширина скрипки на плотность? – Heroka

+0

Привет, Герока, на самом деле моей конечной целью является окрас скрипичного сюжета (или ящик, который я предпочитаю в своем случае из-за ограничений по пространству) на основе другого параметра. Поэтому я хочу показать, как распределение, скажем, карат, влияет на другую переменную; скажем, изобилие. Например, если алмазы с высоким каратом редки (просто предположение), то участок участка скрипки с большей шириной должен быть более синим, а узкие области будут более красноватыми. – user2438149

+0

Для набора данных бриллиантов можно будет заполнить кастрюлю для скрипки с каратами с переменной ценой, чтобы показать связь между каратом и ценой. Благодаря! – user2438149

ответ

1

изменить цвет скрипичного участка вы используете заполнить = переменную, например:

ggplot(diamonds, aes(x=cut,y=carat)) + geom_violin(aes(fill=cut)) 

То же самое касается boxplot

ggplot(diamonds, aes(x=cut,y=carat)) + geom_boxplot(aes(fill=cut)) 

enter image description here

но независимо от значения вы должны иметь одинаковое значение для каждого разреза, то есть, если вы хотите использовать, например, mea n depth/cut, как цветовая переменная, которую вы должны были бы закодировать.

с dplyr группой ваши бриллианты по разрезом и с Суммируйте получить глубину средней (или любой другой переменной)

library(dplyr) 
diamonds_group <- group_by(diamonds, cut) 
diamonds_group <- summarize(diamonds_group, Mean_Price = mean(price)) 

Тогда я использовал diamonds2 в качестве копии алмазов затем манипулировать набор данных

diamonds2 <- diamonds 

я объединить оба dataframes, чтобы получить Mean_Depth в качестве переменной в diamonds2

diamonds2 <- merge(diamonds2, diamonds_group) 

И теперь я могу построить его со средней глубиной в качестве переменного цвета

ggplot(diamonds2, aes(x=cut,y=carat)) + geom_boxplot(aes(fill=Mean_Price)) + scale_fill_gradient2(midpoint = mean(diamonds2$price)) 

enter image description here

+0

Привет, Дерек, спасибо большое! Мне было интересно, можно ли градиент заполнять каждую коробку отдельно по цене (синий для высоких, красный для низкой цены со средним цветным как белый). – user2438149

+0

@ user2438149 Вы имеете в виду один цвет в коробке справа? –

+0

@ user2438149 Я отредактировал ответ, надеюсь, это то, что вы искали –

Смежные вопросы