Mathematica có chức năng cốt truyện đặc biệt cho mục đích này: ListPolarPlot
.Bạn cần phải chuyển đổi x của bạn, y cặp theta, cặp r, ví dụ như sau:
ListPolarPlot[{ArcTan[##], EuclideanDistance[##]} & @@@ (#-ScreenCenter & /@ dalist),
PolarAxes -> True,
PolarGridLines -> Automatic,
Joined -> False,
PolarTicks -> {"Degrees", Automatic},
BaseStyle -> {FontFamily -> "Arial", FontWeight -> Bold,FontSize -> 12},
PlotStyle -> {Red, PointSize -> 0.02}
]
CẬP NHẬT
Theo yêu cầu mỗi bình luận, biểu đồ cực có thể được thực hiện như sau:
maxScale = 100;
angleDivisions = 20;
dAng = (2 \[Pi])/angleDivisions;
S ome dữ liệu thử nghiệm:
(counts = Table[RandomInteger[{0, 100}], {ang, angleDivisions}]) // BarChart
ListPolarPlot[{{0, maxScale}},
PolarAxes -> True, PolarGridLines -> Automatic,
PolarTicks -> {"Degrees", Automatic},
BaseStyle -> {FontFamily -> "Arial", FontWeight -> Bold, FontSize -> 12},
PlotStyle -> {None},
Epilog -> {Opacity[0.7], Blue,
Table[
[email protected]
{
{0, 0},
counts[[ang + 1]] {Cos[ang dAng - dAng/2],Sin[ang dAng- dAng/2]},
counts[[ang + 1]] {Cos[ang dAng + dAng/2],Sin[ang dAng+ dAng/2]}
},
{ang, 0, angleDivisions - 1}
]}
]
Một cải tiến nhỏ về hình ảnh sử dụng Disk
ngành thay vì Polygon
s:
ListPolarPlot[{{0, maxScale}},
PolarAxes -> True, PolarGridLines -> Automatic,
PolarTicks -> {"Degrees", Automatic},
BaseStyle -> {FontFamily -> "Arial", FontWeight -> Bold,
FontSize -> 12}, PlotStyle -> {None},
Epilog -> {Opacity[0.7], Blue,
Table[
Disk[{0,0},counts[[ang+1]],{ang dAng-dAng/2,ang dAng+dAng/2}],
{ang, 0, angleDivisions - 1}
]
}
]
Có thể tách rõ hơn các 'thanh' bằng cách thêm EdgeForm[{Black, Thickness[0.005]}]
vào Epilog
. Bây giờ các con số đánh dấu các vòng vẫn có dấu thập phân không cần thiết theo sau chúng. Theo cốt truyện với sự thay thế /. Style[num_?MachineNumberQ, List[]] -> Style[num // Round, List[]]
loại bỏ những người. Kết quả cuối cùng là:
Cốt truyện trên cũng có thể được tạo ra với SectorChart
mặc dù cốt truyện này chủ yếu được dùng để hiển thị chiều rộng khác nhau và chiều cao của dữ liệu, và không phải là tinh chỉnh cho lô nơi bạn có các lĩnh vực có chiều rộng cố định và bạn muốn làm nổi bật chỉ đường và số liệu theo các hướng đó. Nhưng nó có thể được thực hiện bằng cách sử dụng SectorOrigin
. Vấn đề là tôi lấy nó rằng điểm giữa của mã ngành theo hướng của nó để có 0 deg ở giữa một khu vực tôi phải bù đắp nguồn gốc bằng \[Pi]/angleDivisions
và chỉ định ve bằng tay khi chúng được xoay quá:
SectorChart[
{ConstantArray[1, Length[counts]], counts}\[Transpose],
SectorOrigin -> {-\[Pi]/angleDivisions, "Counterclockwise"},
PolarAxes -> True, PolarGridLines -> Automatic,
PolarTicks ->
{
Table[{i \[Degree] + \[Pi]/angleDivisions, i \[Degree]}, {i, 0, 345, 15}],
Automatic
},
ChartStyle -> {Directive[EdgeForm[{Black, Thickness[0.005]}], Blue]},
BaseStyle -> {FontFamily -> "Arial", FontWeight -> Bold,
FontSize -> 12}
]
Cốt truyện là gần như giống nhau, nhưng nó là tương tác nhiều hơn (chú giải công cụ và như vậy).
Cảm ơn Bạn Sjoerd, có biểu đồ cực như vậy không? – 500
@ 500 xem cập nhật –
http: //t0.gstatic.com/images? q = tbn: ANd9GcTQrKELoYtiEuAElJwl6ocF60URjADZNW1KrFQ8q4npE3mxtMWP –