У меня есть столбчатая диаграмма с несколькими рядами каждый содержащий несколько точек. В настоящее время столбцы все касаются друг друга. Я хочу вызвать разрыв между каждым столбцом. Как я могу достигнуть этого?
Я нашел что, применив PointWidth (Chart1.Series[seriesName]["PointWidth"] = (0.6).ToString();
) дает мне разделение между группами значения x, но не между каждой серийной точкой в отдельной группе (в котором я нуждаюсь). Используя пустой ряд распорной детали, как предложено в другом месте не решает проблему.
Я использую.Net 4, VS 2010, веб-приложение. Мой код диаграммы следует:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web.UI;
using System.Web.UI.DataVisualization.Charting;
namespace WebApplication1
{
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
Chart1.ChartAreas.Add("Default");
Chart1.ChartAreas["Default"].BackColor = Color.White;
Chart1.ChartAreas["Default"].BackSecondaryColor = Color.AliceBlue;
Chart1.ChartAreas["Default"].BackGradientStyle = GradientStyle.TopBottom;
Chart1.BackColor = Color.AliceBlue;
Chart1.BackSecondaryColor = Color.White;
Chart1.BackGradientStyle = GradientStyle.TopBottom;
Chart1.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
var colors = new List(GetSystemColors().Where(c=>c.Name.StartsWith("Dark")));
var rng = new Random();
var start = rng.Next(0, colors.Count - 1);
for (var c = start; c < start + 6; c++)
{
var color = colors[c % colors.Count];
Chart1.Series.Add(color.Name);
Chart1.Series[color.Name].BorderColor = color;
Chart1.Series[color.Name].BorderWidth = 1;
Chart1.Series[color.Name].Color = Color.FromArgb((int)(255 * .7), color);
Chart1.Series[color.Name].BackSecondaryColor = Color.White;
Chart1.Series[color.Name].BackGradientStyle = GradientStyle.TopBottom;
for (var year = DateTime.Now.AddYears(-5).Year; year < DateTime.Now.Year; year++)
Chart1.Series[color.Name].Points.Add(new DataPoint(year, rng.Next(0, 20)));
Chart1.Series[color.Name]["PointWidth"] = (0.6).ToString();
//Chart1.Series.Add("Spacer:" + color.Name);
//Chart1.Series["Spacer:" + color.Name]["PointWidth"] = (0.6).ToString();
}
Chart1.Legends.Add("Default");
}
static IEnumerable GetSystemColors()
{
Type type = typeof(Color);
return type.GetProperties().Where(info => info.PropertyType == type).Select(info => (Color)info.GetValue(null, null));
}
}
}
Тематическое представление может быть несколько сложным в зависимости от типа созданных представлений и изменений, которые необходимо внести. Просмотрите это введение для Views 2 и убедитесь, что установлен модуль расширенной справки , чтобы получить документацию по Views2 из самого модуля Views2 (после активации модуля расширенной справки появится ссылка на документацию на страницах обзора и редактирования ракурсов).
Вы также можете найти некоторые вопросы/ответы здесь на SO (например, Drupal 6: Как быстро тематизировать вид? ), если искать немного.
-121--3894482- При отправке Runnable
или Callable
в службу ExecutingService
вы получаете Future
взамен. Передайте потоки, зависящие от a1, Future
и вызовите Future.get ()
. Эта операция будет блокироваться до завершения потока.
Так:
ExecutorService exec = Executor.newFixedThreadPool(5);
Runnable a1 = ...
final Future f1 = exec.submit(a1);
Runnable a2 = new Runnable() {
@Override
public void run() {
f1.get();
... // do stuff
}
}
exec.submit(a2);
и так далее.
-121--2089584-У меня была своя работа дьяволов, воспроизводящая вашу ситуацию. Я хотел помочь, потому что думал, что смогу чему-то научиться, сделав это, но мне нужна ваша разметка, или еще лучше, все решение! Я испытывал трудности при выполнении «Error executing child request for ChartImg.axd», когда пробовал простую страницу с диаграммой. Я обнаружил, что мне нужно добавить обработчик в конфигурационный элемент. Я затем боролся через неудачу загрузки сборки System.Web.DataVisualization, потому что скопированный мной элемент обработчика ссылался на сборку 3.5 DataVisualization, поэтому я изменил ее на 4.0 и, наконец, увидел график. Какая это была работа!
Причина, по которой серия разделителей не создает зазор, заключается в отсутствии значений в этой серии. Обратите внимание на последние две строки кода, которые добавляют нулевые значения к серии разделителей. Это создает желаемый промежуток между другими сериями, но вы также найдете разделитель серии, перечисленные в вашей легенде, если у вас есть один, который уродлив, чтобы сказать меньше всего.
for (var c = start; c < start + 6; c++)
{
var color = colors[c % colors.Count];
var seriesName = "Series "+ c;//color.Name);
Chart1.Series.Add(seriesName);
Chart1.Series[seriesName].BorderColor = color;
Chart1.Series[seriesName].BorderWidth = 1;
Chart1.Series[seriesName].Color = Color.FromArgb((int)(255 * .7), color);
Chart1.Series[seriesName].BackSecondaryColor = Color.FromArgb((int)(255 * .2), color);
Chart1.Series[seriesName].BackGradientStyle = GradientStyle.TopBottom;
for (var year = DateTime.Now.AddYears(-5).Year; year < DateTime.Now.Year; year++)
Chart1.Series[seriesName].Points.Add(new DataPoint(year, rng.Next(0, 20)));
Chart1.Series[seriesName]["PointWidth"] = (0.6).ToString();
seriesName = "Spacer:" + seriesName;
Chart1.Series.Add(seriesName);
Chart1.Series[seriesName]["PointWidth"] = (0.6).ToString();
for (var year = DateTime.Now.AddYears(-5).Year; year < DateTime.Now.Year; year++)
Chart1.Series[seriesName].Points.Add(new DataPoint(year, 0));
}
Текст легенды можно установить в космос (NB. пустая последовательность игнорируется, а текст легенды не устанавливается), как показано ниже, но в Легенде по-прежнему отображаются эти серии разделителей.
Chart1.Series[seriesName].LegendText = " ";
Если вам повезло, вам не нужно будет показывать легенду, или вы можете установить цвета серии разделителей на тот же цвет, что и фон легенды, а текст легенды на места. Это приводит к двойному интервалу в Легенде, который, вероятно, будет приемлемым.