Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 25
1

Рисование графиков

27.03.2014, 23:16. Показов 5348. Ответов 15
Метки нет (Все метки)

Всем добрый вечер!
Как всегда нужно вчера. Итак есть таблица Excel с данными вида (столбцами): Х, Y, признак1, признак2. Она создается кодом на VBA, который я сделал. Но теперь нужно дописать код, который строил бы графики (диаграммы) по этим данным: столько точеных диаграмм, сколько есть признаков1 (известно заранее и не очень много), причем точки должны быть раскрашены в по какой-то схеме, зависящей от признака2 (схема не важна).
Грызу Уокебаха но там ничего похожего нет. Тому кто возьмется помочь усилия оплачу, например положив деньги на телефон или иным способом. Горит потому что.
Илья
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2014, 23:16
Ответы с готовыми решениями:

Рисование графиков
Всем добрый вечер! Есть таблица Excel ячейки в столбце Т которой начиная со строки 20 и до строки...

Для всех графиков на листе подправить вывод графиков
Здравствуйте! Положение дел следующее: с помощью одной программы, работающей с прибором, строится...

Рисование графиков
Дорогие прграммисты помогите пожалуйста, как сделать программу для рисования графиков функций а...

Рисование графиков в Qt
Здравствуйте. Хочу построить график на основе входных данных, написал функцию для чтения данных и...

15
15037 / 6364 / 1726
Регистрация: 24.09.2011
Сообщений: 9,976
27.03.2014, 23:32 2
Запишите создание диаграммы макрорекордером, потом допилите под свои нужды.
2
5557 / 1363 / 150
Регистрация: 08.02.2009
Сообщений: 4,105
Записей в блоге: 30
28.03.2014, 16:35 3
Мои изыски: Построить график по данным из ячеек!
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 25
22.04.2014, 00:15  [ТС] 4
Всем добрый вечер!
Продолжаю свою тему. В общем мне как-то удалось разобраться с построением графиков Y от Х ( а не от порядкового номера ячейки) средствами VBA. Рисует. Но только примерно половину точек из 38 тыс. Я нигде не нашел указания что построение графиков имеет какие-то ограничения по размеру. Что не означает что их нет, разумеется.
Кто-нибудь имел опыт чего-то похожего? Т.е. построения графиков Х от Y больших объемов? Помогите, а?

Добавлено через 15 минут
Теперь у меня не получается это сделать даже средствами Excel. Может быть существуют какие-то глобальные настойки, которые я умудрился сбить?
0
1116 / 225 / 35
Регистрация: 15.03.2010
Сообщений: 680
22.04.2014, 12:18 5
Цитата Сообщение от Chibrikin Посмотреть сообщение
Рисует. Но только примерно половину точек из 38 тыс
Как ты это определил. Зачем строить график по такому огромному количеству точек? Поробовал у себя 50000 значений строит без проблем. MSO 2010.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Option Explicit
Const n = 50000
Const h = 2 * 3.14159265358979 / (n - 1)
 
' В столбцах A,B будут уничтожены данные!
Public Sub TestChart()
    Dim MyChart As Chart
    Dim temp As Object
    Dim MySeries As Series
    Dim Mysheet As Worksheet
    
    Set Mysheet = ThisWorkbook.Worksheets(1)
    Set MyChart = Mysheet.Shapes.AddChart.Chart
    With MyChart
        .ChartType = xlXYScatterSmooth
    ' На всякий случай удаляем все графики если они есть
        For Each temp In .SeriesCollection
            temp.Delete
        Next
    ' Добавляем новый график
        Set MySeries = .SeriesCollection.NewSeries
        MySeries.MarkerStyle = xlMarkerStyleNone
        .HasLegend = False
    ' Чистим данные по которым строится график
        Mysheet.Columns("A:B").Clear
    ' Заполняем значения X
        Mysheet.Range("A1") = -WorksheetFunction.Pi
       Mysheet.Range("A2:A" & n).Formula = "=R[-1]C + " & Replace(CStr(h), ",", ".")
    ' Заполняем значения Y
        Mysheet.Range("B1:b" & n).Formula = "=EXP(COS(RC[-1]))"
    'Строим график
        MySeries.XValues = Mysheet.Range("A1:A" & n)
        MySeries.Values = Mysheet.Range("B1:B" & n)
    End With
End Sub
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 25
22.04.2014, 13:33  [ТС] 6
Сенкс а лот, сейчас буду разбираться

Добавлено через 12 минут
Я делал примерно так же. Если 50 000 это номера строк, то рисует. А если в этих строках стоят значения, отличные от номера то обрубает все на половине.
0
1116 / 225 / 35
Регистрация: 15.03.2010
Сообщений: 680
22.04.2014, 14:03 7
А если в этих строках стоят значения, отличные от номера то обрубает все на половине.
Тудно что либо сказать не видя данные.
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 25
22.04.2014, 21:41  [ТС] 8
Получилось. Эффект уполовинивания возникает если тип диаграммы это XYScatterlinesNomarkers а сами данные подаются не из листов Excel a из массивов. Надо грызть дальше. За помощь большое спасибо!
0
1116 / 225 / 35
Регистрация: 15.03.2010
Сообщений: 680
22.04.2014, 22:17 9
Припоминаю, что если присваивать данные из массива, то есть ограничение на длину строки.
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 25
14.05.2014, 09:28  [ТС] 10
Дорогие все!
продвигаемся, уже что-то рисует. Прошу дальше помощи:
Если ли у кого опыт рисования из под VBA двух графиков на одном поле с основной и вспомогательной осью?
0
1116 / 225 / 35
Регистрация: 15.03.2010
Сообщений: 680
14.05.2014, 12:02 11
Разницы в построении графика по основной или вспомогательной оси нет.
Вот записал код макрорекордером.
Visual Basic
1
2
    ActiveChart.SeriesCollection(1).AxisGroup = 2 ' xlSecondary Âñïîìîãàòåëüíàÿ îñü
    ActiveChart.SeriesCollection(1).AxisGroup = 1 ' xlPrimary Îñíîâíàÿ îñü
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 25
15.05.2014, 09:11  [ТС] 12
Что-то у меня не получилось. Если можно попросил бы привести несколько строк кода где вводится вспомогательная ось а серия "сажается" на нее.
Заранее очень благодарен.
0
1116 / 225 / 35
Регистрация: 15.03.2010
Сообщений: 680
15.05.2014, 09:39 13
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Option Explicit
Const n = 50
Const h = 2 * 3.14159265358979 / (n - 1)
 
' Â ñòîëáöàõ A,B áóäóò óíè÷òîæåíû äàííûå!
Public Sub TestChart()
    Dim MyChart As Chart
    Dim temp As Object
    Dim MySeries As Series
    Dim Mysheet As Worksheet
    
    Set Mysheet = ThisWorkbook.Worksheets(1)
    Set MyChart = Mysheet.Shapes.AddChart.Chart
    With MyChart
        .ChartType = xlXYScatterSmooth
    ' Íà âñÿêèé ñëó÷àé óäàëÿåì âñå ãðàôèêè åñëè îíè åñòü
        For Each temp In .SeriesCollection
            temp.Delete
        Next
    ' Äîáàâëÿåì íîâûé ãðàôèê
        Set MySeries = .SeriesCollection.NewSeries
        MySeries.MarkerStyle = xlMarkerStyleNone
        .HasLegend = False
    ' ×èñòèì äàííûå ïî êîòîðûì ñòðîèòñÿ ãðàôèê
        Mysheet.Columns("A:C").Clear
    ' Çàïîëíÿåì çíà÷åíèÿ X
        Mysheet.Range("A1") = -WorksheetFunction.Pi
       Mysheet.Range("A2:A" & n).Formula = "=R[-1]C + " & Replace(CStr(h), ",", ".")
    ' Çàïîëíÿåì çíà÷åíèÿ Y
        Mysheet.Range("B1:b" & n).Formula = "=EXP(COS(RC[-1]))"
        Mysheet.Range("C1:C" & n).Formula = "=EXP((RC[-2]))"
    'Ñòðîèì ïåðâûé ãðàôèê
        MySeries.XValues = Mysheet.Range("A1:A" & n)
        MySeries.Values = Mysheet.Range("B1:B" & n)
    ' Ñòðîèì âòîðîé ãðàôèê ïî âñïîìîãàòåëüíîé îñè
        Set MySeries = .SeriesCollection.NewSeries
        MySeries.MarkerStyle = xlMarkerStyleNone
        MySeries.AxisGroup = xlSecondary ' âñïîìîãàòåëüíàÿ îñü
        MySeries.XValues = Mysheet.Range("A1:A" & n)
        MySeries.Values = Mysheet.Range("C1:C" & n)
    End With
End Sub
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 25
19.05.2014, 23:30  [ТС] 14
Что-то стало получаться, грит респект.
Читаю документацию. Оказывается, при рисовании графиков весьма широкие возможности, вплоть до трехмерной анимации!

Добавлено через 14 часов 9 минут
Коллеги, еще вопрос.
Если горизонтальная ось представляет собой ось дат, то правильно ли я понимаю, что задать минимальные и максимальные значения самой оси невозможно? Т.е. формально выражения типа

Visual Basic
1
2
StartDate = "2013/09/25 17:55:00"
MyChart.Axes(xlCategory).MinimumScale = StartDate
проходят, без ошибок, но сам график так перекашивает, что все.
0
1116 / 225 / 35
Регистрация: 15.03.2010
Сообщений: 680
20.05.2014, 09:31 15
Попробуй так
Visual Basic
1
StartDate = cdate("2013/09/25 17:55:00")
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 25
22.05.2014, 09:09  [ТС] 16
Не, не помогло. Читал доки, много думал. Доки пишуть что сие вообще невозможно. Что временную ось нужно пересчитывать в линейную а подписи выводить с форматирование в дату. Кто-нибудь это делал?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2014, 09:09

Рисование графиков
Помогите пожалуйста разобраться с рисованием графиков вот задание Построить график в системе...

Рисование графиков
В общем, мне нужно со строки(edit1) считать формулу например sin(x), а далее просто подставить х...

Рисование графиков
Здравствуйте, уважаемые программисты. Есть задачка: Создать класс, который выводит окно, и рисует...

Рисование графиков.
Привет программисты! подскажите пожалуйста, рисование графиков в паскали, как это сделать? елси...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.